如何在PL/SQL过程中插入NULL值



例如表Foobars、

CREATE TABLE Foobars(
foo NUMBER,
bar NUMBER
);

如何在动态PL/SQL过程中变量插入NULL值?

DECLARE
var_foo  NUMBER := 69;
var_bar  NUMBER := NULL;
l_insert_statement VARCHAR2(128);
BEGIN
-- Assembles insert statement
l_insert_statement :=
'INSERT INTO Foobars VALUES (' ||
var_foo || ', ' ||
var_bar ||
');';
-- Executes insert statement
EXECUTE immediate (l_insert_statement);
END;
/

查询在"0"处返回ORA-00936;立即执行"行:缺少表达式

不要在动态SQL中使用字符串串联传递变量,将它们作为绑定变量传递(并删除动态SQL字符串中的;语句终止符(:

DECLARE
var_foo  NUMBER := 69;
var_bar  NUMBER := NULL;
l_insert_statement VARCHAR2(128);
BEGIN
-- Assembles insert statement
l_insert_statement := 'INSERT INTO Foobars VALUES (:1, :2)';
-- Executes insert statement
EXECUTE immediate l_insert_statement USING var_foo, var_bar;
END;
/

或者,在这种情况下,您不需要动态SQL:

DECLARE
var_foo  NUMBER := 69;
var_bar  NUMBER := NULL;
BEGIN
INSERT INTO Foobars VALUES (var_foo, var_bar);
END;
/

不需要PL/SQL,只需使用一个简单的SQL语句:

INSERT INTO Foobars VALUES (69, NULL);

db<gt;小提琴这里

问题是在l_insert_statement中终止分号;删除

No : ');';
Yes: ')';

然而,您使用的代码中没有任何动态内容,因此我建议您只使用

begin
insert into foobars values (var_foo, var_bar);
end;

最新更新