이 제대로 당신은 당신이 그 절차 내부 쿼리에 대한 계획을 설명하고자하는 절차가 있습니다. 나는 내 생각을 설명하는 몇 가지 가짜 물건을 발명하는 것 :
create table t
( x int not null primary key
, y int not null) @
create procedure p (n int)
language sql
begin
declare c cursor for
select count(1) from t where y = n;
end @
커서의 쿼리에 대한 계획을 설명하고자하는 가정 : n을 결합되지 않기 때문에
db2 "explain plan for select count(1) from t where y = n"
[...]
SQL0206N "N" is not valid in the context where it is used. SQLSTATE=42703
컴파일러가 불평 할 것이다 .
db2 "explain plan for select count(1) from t where y = :n"
또는 그러나, 호스트 변수 또는 매개 변수 표시 n을 변경하면 (""유의) : 잘 될 것입니다
db2 "explain plan for select count(1) from t where y = ?"
지금 당신이 계획을보고 db2exfmt 사용할 수 있습니다
db2exfmt -d sample -g -1 | tee q.plan
Access Plan:
-----------
Total Cost: 0.00644873
Query Degree: 1
Rows
RETURN
( 1)
Cost
I/O
|
1
GRPBY
( 2)
0.0063121
0
|
0
FETCH
( 3)
0.00627372
0
/-----+-----\
0 0
IXSCAN TABLE: LELLE
( 4) T
0.00613403 Q1
0
|
0
INDEX: SYSIBM
SQL141230182649950
Q1
난 당신, 당신은 당신의 계획에 대한 더 많은 정보를 얻을 것이다 db2exfmt
에게 db2expln
보다 훨씬 더 나은 도구를 찾을 것이라 생각합니다.
일반적으로 입력 값은 계획에 영향을주지 않습니다 (reopt 무시). sp를 디버그 할 방법을 찾고 있습니까? 참고로, db2exfmt는 db2expln보다 나은 도구라고 생각합니다. – Lennart
실제로 디버깅하고 싶지 않습니다. SP에 대한 설명 만 있고 SP의 본문에 쿼리를 설명하면 입력 매개 변수가 있기 때문에 오류가 발생합니다. 많은 다른 커서와 매개 변수가있는 복잡한 SP입니다. – BzH
아, 알겠습니다. 프로 시저에서 쿼리를 설명하려면 in-parameters를 매개 변수 마커 (?)로 바꿀 수 있습니다. 그런 다음 그 쿼리에 대한 설명을하십시오. – Lennart