【发布时间】:2015-05-10 14:14:54
【问题描述】:
CREATE TABLE plch_test
(
x NUMBER
, y VARCHAR2 (3)
);
BEGIN
INSERT INTO plch_test
VALUES (1, 'NO');
INSERT INTO plch_test
VALUES (2, NULL);
COMMIT;
END;
/
CREATE OR REPLACE FUNCTION silly_function (p_x NUMBER)
RETURN VARCHAR2
IS
l_y plch_test.y%TYPE;
BEGIN
SELECT t.y
INTO l_y
FROM plch_test t
WHERE t.x = silly_function.p_x;
RETURN l_y;
END;
运行以下代码块后,我会在屏幕上看到什么?
BEGIN
UPDATE plch_test SET y = 'YES' WHERE silly_function (x) != 'YES'; -- Line 2 Function call
select silly_function(x) from dual; -- Line 3
DBMS_OUTPUT.put_line ('Updated=' || SQL%ROWCOUNT);
EXCEPTION
WHEN VALUE_ERROR
THEN
DBMS_OUTPUT.put_line ('VALUE_ERROR');
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('OTHER_ERROR');
END;
/
我认为第 2 行和第 3 行会抛出错误 X: invalid identifier。但是,当我执行上面的脚本时,第 2 行执行并且第 3 行抛出了异常。谁能解释一下第 2 行和第 3 行的区别?
【问题讨论】: