【问题标题】:Inserting value in a oracle table in runtime在运行时在 oracle 表中插入值
【发布时间】:2020-11-24 15:06:58
【问题描述】:

我正在尝试在运行时在 oracle 表中插入值。 当我尝试执行以下错误的代码时:

Error report:
ORA-06550: line 8, column 60:
PL/SQL: ORA-00984: column not allowed here

PLSQL 块:

declare
i integer;
begin
for i in 1..20
loop
if mod(i,2)<>0 then
insert into Departments (DEPT_NUMBER, DEPT_NAME) values(i, &dept_name);
end if;
end loop;
end;

谁能帮我执行这个块。

【问题讨论】:

  • 您在哪里提供 &dept_name?是从某个地方手动输入的吗?
  • 是的,需要用户输入
  • 请描述您尝试实现的逻辑。
  • 好的。逻辑如下: -- 递归地将记录插入“部门”表:- i. DeptNumber 列的值必须是 1 到 20 之间的奇数。接受用户的 DeptName。

标签: sql oracle plsql sql-insert


【解决方案1】:

您需要用单引号将 SQL*Plus 替换变量括起来,或者在输入值时添加单引号。 SQL*Plus 替换变量类似于宏,而不是类型参数。

下面的代码演示了这个问题以及如何通过添加单引号来解决它。

SQL> insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, &dept_name);
Enter value for dept_name: asdf
old   1: insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, &dept_name)
new   1: insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, asdf)
insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, asdf)
                                                           *
ERROR at line 1:
ORA-00984: column not allowed here


SQL> insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, &dept_name);
Enter value for dept_name: 'asdf'
old   1: insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, &dept_name)
new   1: insert into Departments (DEPT_NUMBER, DEPT_NAME) values(1, 'asdf')

1 row created.

SQL>

【讨论】:

    【解决方案2】:

    给定一个输入部门名称,您希望在表中创建与 1 到 20 之间的奇数一样多的行。

    您不需要 PL/SQL 和循环。您可以使用递归查询来生成数字,然后插入:

    insert into departments(dept_number, dept_name)
    with data(n) as (select 1 from dual union all select n + 2 from data where n < 19)
    select n, ? from data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2010-10-27
      • 1970-01-01
      • 2012-05-12
      • 2019-11-25
      • 2021-05-30
      • 2022-11-11
      相关资源
      最近更新 更多