几个自己认为重要的,写一下。
1:可以在is中定义CURSOR,这样就不用RECORD了。这种方法是非常有用的。如果不是必须拼凑的SQL,推荐使用这种办法。
在这里特别注意的就是必须要 OPEN innerCursor1,如果直接 FETCH innerCursor1 INTO r_Table1是有问题的。还有, r_Table1 innerCursor1 % ROWTYPE;这个定义必须要写上,否则,用 FETCH innerCursor1 INTO r_Table1会报错。
2:FOR i0 IN 1..18 LOOP……END LOOP
这种循环,i0会存1到18,是18的时候依然进入循环,这个和java中的循环是不一样的。
3:外部定义的REF CURSOR。
遇到需要拼的SQL或者在用到PLSQL中值得SQL,1的方法是不可以使用的。所以只能定义外部的CURSOR
这是在IS中定义的方法。
在BEGIN中,可以使用:
这时候肯定会有人问,这个
typTfscstCursor是个什么东西。这也就是这种方法的麻烦之处,
typTfscstCursor必须是和SELECT出的字段一一对应的RECORD数组。假如SELECT出了两个字段,cost_at_n和spl_ahd_dtls_kjnm_v,这两个字段在数据库中存在。那么我们可以定义一个RECORD数组如下:
这样,我们只需要定义
typTfscstCursor 是
typTCursorRecored 类型就可以了,这样FETCH INTO也就不会报错了。
总之,熟悉CURSOR的用法是很重要的,是PLSQL的一个基本能力,有好多同事在编程中就是由于不能灵活的应用CURSOR,导致走了好多弯路。今天先写这些,下次再写。
1:可以在is中定义CURSOR,这样就不用RECORD了。这种方法是非常有用的。如果不是必须拼凑的SQL,推荐使用这种办法。
IS
CURSOR innerCursor1 IS
SELECT
-- A.製造組織コード
A.pdct_ocd_c
FROM
w_jobno_cost A
WHERE
A.cntg_mgno_c = i_cntgMgno_cmpt;
r_Table1 innerCursor1 % ROWTYPE;
BEGIN
OPEN innerCursor1
FETCH innerCursor1 INTO r_Table1;
EXIT WHEN innerCursor1 % NOTFOUND
CURSOR innerCursor1 IS
SELECT
-- A.製造組織コード
A.pdct_ocd_c
FROM
w_jobno_cost A
WHERE
A.cntg_mgno_c = i_cntgMgno_cmpt;
r_Table1 innerCursor1 % ROWTYPE;
BEGIN
OPEN innerCursor1
FETCH innerCursor1 INTO r_Table1;
EXIT WHEN innerCursor1 % NOTFOUND
在这里特别注意的就是必须要 OPEN innerCursor1,如果直接 FETCH innerCursor1 INTO r_Table1是有问题的。还有, r_Table1 innerCursor1 % ROWTYPE;这个定义必须要写上,否则,用 FETCH innerCursor1 INTO r_Table1会报错。
2:FOR i0 IN 1..18 LOOP……END LOOP
这种循环,i0会存1到18,是18的时候依然进入循环,这个和java中的循环是不一样的。
3:外部定义的REF CURSOR。
遇到需要拼的SQL或者在用到PLSQL中值得SQL,1的方法是不可以使用的。所以只能定义外部的CURSOR
TYPE typCursor
IS
REF
CURSOR
tfscstCursor typCursor;
tfscstCursor typCursor;
在BEGIN中,可以使用:
OPEN
tfscstCursor
FOR
SELECT .......
FETCH tfscstCursor INTO typTfscstCursor;
SELECT .......
FETCH tfscstCursor INTO typTfscstCursor;
TYPE typTCursorRecored
IS
RECORD (
COST_AT_N t_jobno_cost_dtl.cost_at_n % TYPE
,SPL_AHD_DTLS_KJNM_V m_acnt_head_dtls.spl_ahd_dtls_kjnm_v % TYPE
);
COST_AT_N t_jobno_cost_dtl.cost_at_n % TYPE
,SPL_AHD_DTLS_KJNM_V m_acnt_head_dtls.spl_ahd_dtls_kjnm_v % TYPE
);
总之,熟悉CURSOR的用法是很重要的,是PLSQL的一个基本能力,有好多同事在编程中就是由于不能灵活的应用CURSOR,导致走了好多弯路。今天先写这些,下次再写。