반응형
java jdk1.5 를 다운받기위해 Oracle 을 들렸는데...

JDK 1.5 소스를 받으려고 하니 로그인을 하라고 한다... 자신있게 ID/Pass 를 입력했는데...  틀렸다고 하는군...

찾을수가 없어서 ID 찾기를 하는데...

ID 찾기는 안되고 NullpointerException 이... 역시 개발도 다 사람이 하기때문에... 이런 상황이 나오는군..
URL : https://reg.sun.com/accounthelp?program=cds&goto=https%3A%2F%2Fcds.sun.com%2Fis-bin%2FINTERSHOP.enfinity%2FWFS%2FCDS-CDS_Developer-Site%2Fen_US%2F-%2FUSD%2FViewProductDetail-Start%3Bpgid%3DyYdgaHqkkjVSR0EUPIQsoQ3D0000U4FZ89Rg%3Bsid%3DF9xKX5_3ZPRKXtJP_-XDoY9FU3jvoi1gql-ZH0O0oGUlX0zMowg%3D%3F%26ProductUUID%3D.59IBe.oWd4AAAEZZvkZK4O9%26ProductID%3D.59IBe.oWd4AAAEZZvkZK4O9%26Origin%3DViewFilteredProducts-SingleVariationTypeFilter





개발할때 많이 보던 페이지가 떡하니 나오네요...


Posted by 상피리꿈
반응형
Table Function 과 Pipeline Table Function 의 차이점을 이제야 알겠네요.

Table Function 은 여러분도 알겠지만 Table 처럼 만들어서 값을 리턴하는경우 입니다. 그저 string 형태로 return
하는 것이 아니고 table 형태로 return 을 하게 되어  프로시저 및 프로그램에서도 많이 사용을 하게되죠...
그런데 그 table function 과 pipeline table function 과의 약간의 차이가 있군요...

Pipeline Table Function

create or replace function pipeline_func(strt int, end int)
   return table_type1
   pipelined            ==> Table Function 과 pipeline Table Function 문법 차이점..
   is 
   .......

한 Row씩 처리하므로 바로 결과 값들이 출력되기 시작 
Table Function은 전체 데이터 처리를 수행하지만
Pipelined Table Function은 부분 범위 처리를 수행한다는 것을 확인할 수 있다.

Table function 은 전체 데이터가 처리된 이후에 결과가 조회가 되며, Pipeline Table function 은
row 단위로 처리가 된부분에 대해서는 조회가 되어 노출이 되는것이다...

하지만... Application 에서 사용할때에는 위의 같은 pipeline Table function 을 사용하게되면...
응답이 바로바로 와서 application 단에서 혼돈이 있지 않는가 의문이 든다.

일전에 pipeline table function 을 사용하던 부분이 있었는데, application 에서 사용하면 oracle 오류가 발생해서
한참 찾다가 pipeline 을 삭제했더니 문제없이 해결이 된적이 있다.

application 에서 바로 사용하는 경우에는 좀 문제가 있을수 있으니 좀더 확인한 후에 사용을 해야할것이다..


Posted by 상피리꿈
반응형
log4j 관련 사항을 한가지 쓰고자....

이번에 이런사항을 알았습니다.

jeus 를 쓰다보니 생긴일인데요...

was command option 중에 -Dlog4j.configuration 이라는게있씁니다.
모든 java command 에서 사용을 할수가 있죠. 물론 log4j 모듈이 있는곳에서요..??..

-Dlog4j.configuration=aaa/log4j.container.xml   옵션을 주면
classpath 이하로 aaa/log4j.container.xml 을 log4j 로 로그를 쓸수가 있습니다...

위와같은 경우는 어떤때 쓸까요??

주로 이런경우겠죠?? 소스및 환경을 한곳에 두고 instance 혹은 container 를 여러개 사용할 경우에

각 instance 및 container 의 로그를 분리해서 쌓고자 할때 좋겠죠??..

사용시 참고하세요...!

또한가지...

Oracle OCI LOAD_BALANCE option....!! ( thin 도 가능하죠... )

모두들 tnsnames.ora 를 열어보면 각 서비스 alias 의 옵션중에 fail-over 와 load_balance 옵션이 있습니다.

보통 load_balance 옵션은 off 로 설정이 되어있습니다.

load_balance 옵션을 on 으로 설정한 경우에는...

제약사항!! : Oracle DB 의 RAC DB 이어야 합니다. 비용도 많이 들죠.. 아무튼... 이러한 상황에서

2대의 DB 에 각각 pool 을 생성하여 사용을 할수가 있씁니다. 부하를 2대의 db 로 분산할수 있다는거죠!!

단!! 중요한 제약사항 하나더...!!! 중요합니다.

two-phase commit 의 경우!! XA 드라이버 사용의 경우입니다. XA 드라이버를 사용하는 모든 경우가 아니고요..

반드시 two-phase commit 하는 시스템의 경우입니다.
왜냐면.. DB connection pool 을 oracle 에서 관리하기 때문에 각각의 two phase 에 대한 pool 을 관장을 할수가

없습니다.. 고로 transaction 관리를 할수가 없다는거죠... !!

참고로 하세요.. 하지만 two-phase commit 시스템이 아닌경우에는 간단하게 load_balance 를 구현할수가 있습니다. app 에서 제어하지 않아도 가능하다는 얘기죠...!!

간만에 글을 남깁니다...!!

'IT가' 카테고리의 다른 글

내일이 시스템 오픈입니다.  (0) 2009.08.01
jeus log 설정  (0) 2009.07.14
log4j, JEUS5 logging 관련 정보.  (867) 2009.06.30
Posted by 상피리꿈
반응형
저도 이거저거 찾아보다가 안것입니다.
결국에는 Database.sarang.net 에서 찾았습니다.

      SELECT card_code, card_name, ltrim(sys_connect_by_path ( noint_mon, ','), ',') noint_mon
      FROM (
           SELECT card_code, card_name, noint_mon,
                 row_number() over(PARTITION BY card_code ORDER BY noint_mon) rn,  --card_code 기준 row수
                  COUNT(*) over(PARTITION BY card_code) cnt  -- card_code 기준 갯수
             FROM (
               select card_code,card_name, noint_mon   -- 샘플
                   from dual
                )
            )
      )
      WHERE rn = cnt
      START WITH rn = 1
      CONNECT BY PRIOR rn = rn - 1
             AND PRIOR card_code = card_code

connect by 를 사용하여  key 에 맞는 row 수에 맞게 모두 값을 합치는 것입니다.

card_code || card_name || noint_mon
13 || 삼성 || 4
13 || 삼성 || 5
13 || 삼성 || 9
20 || 현대 || 3
20 || 현대 || 6
20 || 현대 || 12

데이터가 이렇다면 위의 쿼리 결과는

card_code || card_name || noint_mon
13 || 삼성 || 4,5,9
20 || 현대 || 3,6,12

이렇게 결과가 나옵니다.

기존에는

max 또는 sum 의 decode 를 이용하여 열을 모두 열거하여 처리하는것이 었죠!!

위의것이 좀더 간편할듯 합니다.
위의 쿼리는 결과key 의 갯수 또는 집합 key의 갯수를 모를때 사용할 수가 있겠죠?



'IT가' 카테고리의 다른 글

log4j, JEUS5 logging 관련 정보.  (867) 2009.06.30
Oracle RAC Load Balance.  (0) 2009.06.05
with clause - 9i 기능.  (0) 2009.05.26
Posted by 상피리꿈

2009. 6. 5. 12:26 IT가

Oracle RAC Load Balance.

반응형
아래와 같은 내용이 필요하던 차에 우연찮게 DBGuide.net 에서 아래 내용을 보게되었다.

Client-Side Connect-Time Load Balancing

 Client-Side Connect-Time Load Balancing의 특징은 이용 가능한 Listener 리스트 중에서 랜덤(random)하게 접속 요청을 하는 것이다. 이는 클라이언트의 tnsnames.ora에 “LOAD_ BALANCE=ON”을 설정함으로써 가능하다.

-- TNSNAMES.ORA<br /> ghlee =<br /> (DESCRIPTION =<br /> (LOAD_BALANCE=ON)<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.18)(PORT = 1521)) #ghlee1<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.19)(PORT = 1521)) #ghlee2<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = GHLEE)))<br /> -- 첫 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> SCOTT@ghlee1 &amp;gt;@in.sql<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> -------------- -------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 두 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 세 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee1 ghlee1<br /> -- 네 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 2 ghlee2 ghlee2<br /> -- 다섯 번째 접속 시도<br /> [/oracle/product/10.2.0/network/admin&amp;gt; sqlplus scott/tiger@ghlee<br /> INSTANCE_NUMBER INSTANCE_NAME HOST_NAME<br /> --------------- --------------- --------------<br /> 1 ghlee2 ghlee2<br />

위의 결과에서 볼 수 있는 것처럼 랜덤하게 접속을 시도한다. 만약 “LOAD_BALANCE=OFF”로 설정되어 있다면 List에 명시된 처음 Address (HOST = 192.128.25.18)로 먼저 접속을 시도하고 응답이 없을 경우 TCP TIMEOUT까지 대기한 후 다음 Address list (HOST = 192.128.25.19 )로 접근을 시도한다.

 여기까지가 일반적 OCI driver 를 사용하여 Load Balancing 하는 것이다.

이 이하는 서버에서의 Load balance 와 Oracle Listener 쪽의  좀더 추가적인 사용안 인것 같다.


Server-Side Connect-Time Load Balancing


Server-Side Connect-Time Load Balancing이라는 것은 서버 측에 설정하는 것으로서 동작 방식은 다음과 같다.

(중략)

위의 정보에서 보면 지금 Listener에는 “GHLEE”와 “GHLEE1”이라는 두 개의 서비스가 등록되어 있고, 각 서비스는 “GHLEE1” Instance에 등록되어 있음을 확인할 수 있다. 그리고 “GHLEE” 서비스는 상태 정보가 “READY”인 반면, “GHLEE1” 서비스의 상태 정보는 “UNKNOWN”임을 확인할 수 있다. “GHLEE”라는 서비스는 동적으로 등록된 서비스이므로 PMON에 의해 상태를 지속적으로 Listener에게 업데이트해줌으로써 상태 정보를 확인할 수 있어 “READY”라고 보이며, GHLEE1이라는 서버는 위의 listener.ora 파일에서 기술한 정보이므로 동적으로 등록되지 않아 상태 정보를 확인할 수 없어 “UNKNOWN”이라고 보이는 것이다. Dynamic Register의 구성 방법은 다음과 같다.

 

● Service Registration 구성
이것은 초기화 파라미터 중 “SERVICE_NAMES” 파라미터에 값을 설정함으로써 가능하다. 이 이름이 바로 Listener에 등록하는 서비스 이름으로 Default 이름은 DB Install 시에 설정한 dbname.domain이다. 여기서는 SERIVCE_NAMES 파라미터를 설정하지 않았어도, dbname.domain에 의해 서비스 이름이 “GHLEE”가 되었다.

 

● Default Local Listener Registration 방법
Default 로 PMON process는 TCP/IP Port 1521을 사용하는 local Listener에 자동으로 서비스 정보를 등록한다. 위의 예제에서는 Default Port를 사용하고 dbname.domain에 의해서 “GHLEE”라는 서비스가 자동으로 등록되었다.

 

● NON-Default Listener Registration 방법
PMON에 의해 Local Listener에 등록을 원하고 TCP/IP가 Port 1521을 사용하지 않을 경우는 다음과 같이 LOCAL_ LISTENER PARAMETER를 설정하면 된다.

 

LOCAL_LISTENER = <listener_alias> → Parameter file 기술
Listener_alias =
(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP_(HOST= node1_vip)(PORT=1524))
→ 서버의 tnsnames.ora 파일에 기술
or
LOCAL_LISTENER =“(ADDRESS=(PROTOCOL=TCP)(HOST =node1_vip)(PORT=1524))” → Parameter 변경

 

● Remote Listener Registration 방법
PMON process에 의해 remote Listener를 등록하고 싶다면, 다음과 같이 REMOTE_LISTENER 파라미터를 설정해야 한다.

 

REMOTE_LISTENER=< listener_alias> → Parameter file 기술
Listener_alias =
(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP_(HOST =node2_vip)(PORT=1521))
or
REMOTE_LISTENER=“(ADDRESS=(PROTOCOL=TCP_(HOST =node2_vip)PORT=1521))”

 

위와 같이 등록했을 때 LISTENER SERVICES를 확인하면 다음과 같다.

-- PMON에 의해 자동으로 등록하는 방법을 이용하기 위해 listener.ora 파일에 SID 정보를<br /> 기술하지 않는다. GHLEE2에도 다음의 상황처럼 기술한다. <br /> LISTENER_GHLEE1 =<br /> (DESCRIPTION_LIST =<br /> (DESCRIPTION = <br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.18)(PORT = 1521))#ghlee1_vip<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 192.128.25.30)(PORT = 1521))#ghlee1_real ip<br /> ))<br /> -- service_names에 ghlee, ghlee1 서비스를 설정한다.<br /> SQL&amp;gt; alter system set service_names='GHLEE', 'GHLEE1' <br /> scope=BOTH sid='GHLEE1';<br /> -- remote_listener에 ghlee2의 vip와 port 등을 설정한다. <br /> SQL&amp;gt; alter system set remote_listener='(address= (protocol=tcp)(host=192.128.25.19)(PORT=1521)' <br /> scope=BOTH sid='GHLEE1';<br /> -- Listener Service의 정보 확인. 위의 Parameter 값들의 설정으로 인해 PMON에<br /> 의해서 자동으로 등록된 것을 확인할 수 있다.<br /> [ghlee1@/oracle/product/10.2.0/network/admin&amp;gt; lsnrctl services<br /> Service "GHLEE" has 2 instance(s).<br /> Instance "GHLEE1", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> LOCAL SERVER<br /> Instance "GHLEE2", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> REMOTE SERVER<br /> (ADDRESS=(PROTOCOL=TCP)(HOST=GHLEE2-vip)(PORT=1521))<br /> Service "GHLEE1" has 1 instance(s).<br /> Instance "GHLEE1", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> LOCAL SERVER<br /> Service "GHLEE2" has 1 instance(s).<br /> Instance "GHLEE2", status READY, has 1 handler(s) for this service...<br /> Handler(s):<br /> "DEDICATED" established:0 refused:0 state:ready<br /> REMOTE SERVER<br /> (ADDRESS=(PROTOCOL=TCP)(HOST=GHLEE2-vip)(PORT=1521))

위와 같이 Server에 Dynamic Register 방식으로 구성하게 되면 각 Listener는 Server의 상태 정보를 가지고 있어 좀 더 Idle한 서버에서 클라이언트의 요청을 받을 수 있는 Load Balancing을 구현할 수 있다.

 

출처 : 한국 마이크로 소프트웨어 [2009년 5월호]

제공 : DB포탈사이트 DBguide.net


자세한건, DBGuide.net 혹은 마이크로 소프트웨어 사이트에서 확인하시기 바랍니다.

'IT가' 카테고리의 다른 글

row 를 column 으로 붙일경우 유용한 쿼리 한가지.  (1) 2009.06.17
with clause - 9i 기능.  (0) 2009.05.26
오라클의 Middleware 시장 투자.  (0) 2009.04.29
Posted by 상피리꿈

2009. 5. 26. 22:07 IT가

with clause - 9i 기능.

반응형
with clause 를 이용하여 쿼리시 메모리에 쿼리결과를 저장하여 처리할 수 있도록 추가된 기능.
단, 9i JDBC Driver 에서는 안되는듯하다... (9i Driver 에서는 안되었습니다...)
"Subquery Factoring Clause" 라고도 한다.

Improving Query Performance with the SQL WITH Clause
   

Oracle9i significantly enhances both the functionality and performance of SQL to address the requirements of business intelligence queries. The SELECT statement’s WITH clause, introduced in Oracle9i, provides powerful new syntax for enhancing query performance. It optimizes query speed by eliminating redundant processing in complex queries.

Consider a lengthy query which has multiple references to a single subquery block. Processing subquery blocks can be costly, so recomputing a block every time it is referenced in the SELECT statement is highly inefficient. The WITH clause enables a SELECT statement to define the subquery block at the start of the query, process the block just once, label the results, and then refer to the results multiple times.

The WITH clause, formally known as the subquery factoring clause, is part of the SQL-99 standard. The clause precedes the SELECT statement of a query and starts with the keyword “WITH.” The WITH is followed by the subquery definition and a label for the result set. The query below shows a basic example of the clause:

WITH channel_summary AS
  ( SELECT channels.channel_desc,
       SUM(amount_sold) AS channel_total
    FROM sales, channels
    WHERE sales.channel_id = channels.channel_id
    GROUP BY channels.channel_desc )
SELECT channel_desc, channel_total
FROM channel_summary
WHERE channel_total >
  ( SELECT SUM(channel_total) * 1/3
    FROM channel_summary );

This query uses the WITH clause to calculate the sum of sales for each sales channel and label the results as channel_summary. Then it checks each channel's sales total to see if any channel's sales are greater than one third of the total sales. By using the new clause, the channel_summary data is calculated just once, avoiding an extra scan through the large sales table.

Although the primary purpose of the WITH clause is performance improvement, it also makes queries easier to read, write and maintain. Rather than duplicating a large block repeatedly through a SELECT statement, the block is localized at the very start of the query. Note that the clause can define multiple subquery blocks at the start of a SELECT statement: when several blocks are defined at the start, the query text is greatly simplified and its speed vastly improved.

The SQL WITH clause in Oracle9i significantly improves performance for complex business intelligence queries. Together with the many other SQL enhancements in Oracle9i, the WITH clause extends Oracle's leadership in business intelligence.

More Info

Oracle9i SQL Reference: Chapter 17 - SELECT Statement
Oracle9i Data Warehousing Guide: Chapter 18 - SQL for Aggregation in Data Warehouses

Oracle9i Daily Features
Archives


추가적 참고내용...

The Oracle WITH clause is an incredibly powerful tool available since Oracle9i R2 that enables the user to create virtual views that become reusable via an alias throughout the main body of a query. A WITH clause (officially called a Subquery Factoring Clause) is pre-pended to a SELECT statement. The power of the WITH clause becomes evident in situations where a subquery, or indeed any portion of a query, is used in more than one location throughout a SELECT statement. Since the results from a WITH clause are calculated only once, dramatic performance improvements may be realized. As an added benefit, WITH clauses tend to simplify the look of a query since repeated sections are centralized and aliased. The basic syntax for a SELECT statement using a WITH clause may look a little strange at first and some tools (i.e. Oracle Reports in some cases) may be unable to properly parse this construct:

WITH
 alias_name         -- Alias to use in the main query
AS
(insert a query here)
SELECT... -- Beginning of the query main body

It should be noted that multiple aliases can be defined in the WITH clause:

WITH
alias_name1
AS
(query1)
aleas_name2
AS
(query2)
SELECT...

As previously indicated, the intended use of a WITH clause is to increase efficiency by eliminating repeated query sections in a SELECT statement. The following query (which we realize could be written in a more efficient manner!), returns customers from a fictitious SALES table that were found in the top ten for both January and February. This query is constructed using two in-line views, one for the January calculation and one for February. Notice the duplication in the in-line views aliased as “jan” and “feb”; only the date ranges are different:

For this exercise, we employ the simple table Sales
with three columns:
customer_name VARCHAR2;
sales_date DATE;
customer_sales NUMBER;

SELECT top_10_jan.customer_name,
top_10_jan.total_sales_jan,
top_10_feb.total_sales_feb
FROM (
SELECT customer_name,
total_sales_jan
FROM (
SELECT customer_name,
SUM(customer_sales) total_sales_jan
FROM sales
WHERE sales_date
BETWEEN '01-jan-06' AND '31-JAN-06'
GROUP BY customer_name
ORDER BY 2 DESC
) jan
WHERE rownum <11
) top_10_jan,
(
SELECT customer_name,
total_sales_feb
FROM (
SELECT customer_name,
SUM(customer_sales) total_sales_feb
FROM sales
WHERE sales_date
BETWEEN '01-FEB-06' AND '28-FEB-06'
GROUP BY customer_name
ORDER BY 2 DESC
) feb
WHERE rownum <11
) top_10_feb
WHERE top_10_jan.customer_name = top_10_feb.customer_name;

By substituting WITH clause in place of the two in-line views, the above query can be rewritten in a more efficient manner:

WITH
tot_sales
AS
(
SELECT customer_name,
sales_date,
total_sales,
RANK() OVER (PARTITION BY sales_date
ORDER BY total_sales DESC) month_rank
FROM (
SELECT customer_name,
TRUNC(sales_date,'MONTH') sales_date,
SUM(customer_sales) total_sales
FROM sales
WHERE sales_date >= '01-JAN-06'
AND sales_date <= '28-FEB-06'
GROUP BY customer_name,
TRUNC(sales_date,'MONTH')
) jan
)
SELECT tot_jan.customer_name,
tot_jan.total_sales,
tot_feb.total_sales
FROM tot_sales tot_jan,
tot_sales tot_feb
WHERE tot_jan.sales_date = '01-JAN-06'
AND tot_feb.sales_date = '01-FEB-06'
AND tot_jan.month_rank <11
AND tot_feb.month_rank <11
AND tot_jan.customer_name = tot_feb.customer_name;

Just how much more efficient is our new query? Explain plans for each query using Oracle 10G R2 and a table with 25000 rows yields the following query costs:

Query method 1: In-line views

Query Method 2: WITH Clause

The query using in-line views shows a cost of 1449, but re-writing the query to use a WITH clause shows a drop to 861! This big savings comes from the elimination of a second full table scan of the SALES table. A WITH clause calculates its result set only once and re-uses it throughout the query. In our simulations, this query actually resulted in a 40% improvement in execution time. Not a bad little tuning trick!

We realize of course that this query could have been written without the need for in-line views OR the WITH clause and perhaps even more efficiently. Take for example the following query, which has a cost of 727 (but in practice was actually slower than the WITH query in terms of execution time):

SELECT customer_name,
jan_sales,
feb_sales
FROM
(
SELECT customer_name,
jan_sales,
feb_sales,
RANK() OVER (ORDER BY jan_sales DESC) jan_rank,
RANK() OVER (ORDER BY feb_sales DESC) feb_rank
FROM
(
SELECT customer_name,
SUM(DECODE(TRUNC(sales_date,'MONTH'),
'01-JAN-06', customer_sales,0)) jan_sales,
SUM(DECODE(TRUNC(sales_date,'MONTH'),
'01-FEB-06', customer_sales,0)) feb_sales
FROM sales
WHERE sales_date >= '01-JAN-06'
AND sales_date <= '28-FEB-06'
GROUP BY customer_name
)
)
WHERE jan_rank <11
AND feb_rank <11;

Clearly, there are many ways to solve a problem, and Subquerey Factoring adds another powerful tool to facilitate writing both efficient and elegant queries. Use it, but remember that the WITH clause comes with limitations and sometimes returns unexpected results. But more on that in a different post.


Posted by 상피리꿈
이전버튼 1 이전버튼

반응형
블로그 이미지
상피리꿈
Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함


반응형