如何在 PL/SQL 过程中插入 NULL 值?
How to insert a NULL value in PL/SQL Procedure?
例如table Foobars,
CREATE TABLE Foobars(
foo NUMBER,
bar NUMBER
);
如何从变量中插入一个NULL值动态 PL/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 (' ||
var_foo || ', ' ||
var_bar ||
');';
-- Executes insert statement
EXECUTE immediate (l_insert_statement);
END;
/
在“EXECUTE immediate...”行的查询 returns ORA-00936:缺少表达式。
问题是 l_insert_statement
中的分号终止;删除它
No : ');';
Yes: ')';
但是,您使用的代码中没有任何动态,所以我建议您简单地使用
begin
insert into foobars values (var_foo, var_bar);
end;
不要使用字符串连接在动态 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<>fiddle here
例如table Foobars,
CREATE TABLE Foobars(
foo NUMBER,
bar NUMBER
);
如何从变量中插入一个NULL值动态 PL/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 (' ||
var_foo || ', ' ||
var_bar ||
');';
-- Executes insert statement
EXECUTE immediate (l_insert_statement);
END;
/
在“EXECUTE immediate...”行的查询 returns ORA-00936:缺少表达式。
问题是 l_insert_statement
中的分号终止;删除它
No : ');';
Yes: ')';
但是,您使用的代码中没有任何动态,所以我建议您简单地使用
begin
insert into foobars values (var_foo, var_bar);
end;
不要使用字符串连接在动态 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<>fiddle here