variables - 为什么用变量名替换其值导致 “' xxx'应该被声明为“错误”?

标签 variables plsql compiler-errors sqlplus identifier

我编写了以下PL/SQL块:

declare 
    v_name varchar2(20);
    v_sal integer;
begin
    EXECUTE IMMEDIATE ('CREATE TABLE EMP5 (name varchar2(20),sal integer,primary key(name))');
    dbms_output.put_line('Enter name : ');
    v_name:=&v_name;
    dbms_output.put_line('salary : ');
    v_sal :=&v_sal;
    insert into emp5 (name,sal) values (v_name,v_sal);
end;
/

然后我得到以下编译器输出:
Enter a valeur for v_name : dhia
old 6 : v_name:=&v_name;
new 6 : v_name:=dhia;
Enter a valeur for v_sal : 10
old 8 : v_sal :=v_&sal;
new 8 : v_sal :=10;
v_name:=dhia;
      *
ERREUR at line 6 :
ORA-06550: line 6, colon 7 :
PLS-00201: the identifier 'DHIA' should be declared
ORA-06550: line 6, colon 1 :
PL/SQL: Statement ignored
ORA-06550: line9, colon 13 :
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 9, colon 1 :
PL/SQL: SQL Statement ignored

我的问题是,为什么脚本中的变量“名称”被其值“dhia”替换为该错误,以及如何解决该错误?

最佳答案

您不应以这种方式使用变量,预期的行为是用其值替换它们,变量不应与列名相同,请尝试以下操作:

declare 
varName varchar2(20);
varSal integer;
sql_stmt varchar2(200);
begin
EXECUTE IMMEDIATE ('CREATE TABLE EMP5 (name varchar2(20),sal integer,primary key(name))');
dbms_output.put_line('Enter name : ');
varName :=&varName;
dbms_output.put_line('salary : ');
varSal :=&varSal;
sql_stmt := 'INSERT INTO EMP5 VALUES (:1, :2)';
EXECUTE IMMEDIATE sql_stmt USING varName, varSal; 
end;
/

关于variables - 为什么用变量名替换其值导致 “' xxx'应该被声明为“错误”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160810/

相关文章:

c# - 局部变量 - switch case

python - 对 tensorflow 变量的切片分配

java - 如何使用 Swing 接口(interface)从键盘读取值

Linux bash//日期 : Working with variables and date

jquery - 使用jquery以表格形式显示总价

oracle - 在PL/SQL中,以一个表作为参数,过滤它并返回它

c++ - 如何解决这两个错误? ‘strlwr’- 'but argument 2 has type ‘int’'

c++ - 修剪空格/转换迭代器

oracle - 包的初始化部分

oracle - 生成数