SHOW ERROR;
DECLARE
CURSOR cur_pay IS SELECT * FROM PAY_TABLE WHERE MONTHS_BETWEEN(SYSDATE, EFF_DATE) > 6
FOR UPDATE NOWAIT;
BEGIN
FOR row IN cur_pay LOOP
IF row.PAY_TYPE = 'HOURLY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE
WHERE CURRENT OF cur_pay;
ELSIF row.PAY_TYPE = 'SALARY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE*1.05
WHERE CURRENT OF cur_pay;
END IF;
END LOOP;
END;
/错误如下:SQL> @E:\orcl_lab\payIncrease1.sql
没有错误。
DECLARE
*
第 1 行出现错误:
ORA-01722: 无效数字
ORA-06512: 在 line 7
DECLARE
CURSOR cur_pay IS SELECT * FROM PAY_TABLE WHERE MONTHS_BETWEEN(SYSDATE, EFF_DATE) > 6
FOR UPDATE NOWAIT;
BEGIN
FOR row IN cur_pay LOOP
IF row.PAY_TYPE = 'HOURLY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE
WHERE CURRENT OF cur_pay;
ELSIF row.PAY_TYPE = 'SALARY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE*1.05
WHERE CURRENT OF cur_pay;
END IF;
END LOOP;
END;
/错误如下:SQL> @E:\orcl_lab\payIncrease1.sql
没有错误。
DECLARE
*
第 1 行出现错误:
ORA-01722: 无效数字
ORA-06512: 在 line 7
CURSOR cur_pay IS SELECT * FROM PAY_TABLE WHERE MONTHS_BETWEEN(SYSDATE, EFF_DATE) > 6
FOR UPDATE NOWAIT;
BEGIN
FOR row IN cur_pay LOOP
IF row.PAY_TYPE = 'HOURLY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE
WHERE CURRENT OF cur_pay;
ELSIF row.PAY_TYPE = 'SALARY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_TYPE*1.05
WHERE CURRENT OF cur_pay;
END IF;
END LOOP;
END;
搞不清什么类型
SQL> @E:\orcl_lab\payIncrease1.sql
PROCEDURE PRINT_ROWS 出现错误:LINE/COL ERROR
-------- -----------------------------------------------------------------
1/30 PLS-00103: 出现符号 "TABLE"在需要下列之一时:
out <an identifier>
<a double-quoted delimited-identifier> long double ref char
time timestamp interval date binary national character nchar
符号 "<an identifier>在 "TABLE" 继续之前已插入。5/2 PLS-00103: 出现符号 "END"在需要下列之一时:
:= . ( % ;
符号 ";" 被替换为 "END" 后继续。
PL/SQL 过程已成功完成。SHOW ERROR;
DECLARE
CURSOR cur_pay IS SELECT * FROM PAY_TABLE
WHERE MONTHS_BETWEEN(SYSDATE, EFF_DATE) > 6
FOR UPDATE NOWAIT;
BEGIN
FOR row IN cur_pay LOOP
IF row.PAY_TYPE = 'HOURLY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_RATE*1.04
WHERE CURRENT OF cur_pay;
ELSIF row.PAY_TYPE = 'SALARY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_RATE*1.05
WHERE CURRENT OF cur_pay;
END IF;
END LOOP;
END;
/
SHOW ERROR;
DECLARE
CURSOR cur_pay IS SELECT * FROM PAY_TABLE
WHERE MONTHS_BETWEEN(SYSDATE, EFF_DATE) > 6
FOR UPDATE NOWAIT;
BEGIN
FOR row IN cur_pay LOOP
IF row.PAY_TYPE = 'HOURLY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_RATE*1.04
WHERE CURRENT OF cur_pay;
ELSIF row.PAY_TYPE = 'SALARY' THEN
UPDATE PAY_TABLE SET PAY_RATE = row.PAY_RATE*1.05
WHERE CURRENT OF cur_pay;
END IF;
END LOOP;
END;
/
--这两块能过去吗?类型不对吧