【问题标题】:Create a parameterless procedure创建无参数过程
【发布时间】:2021-05-18 08:08:44
【问题描述】:

我正在尝试创建一个无参数过程,用于从表中获取列并对它进行一些修改并将其粘贴到另一个表中。但我收到以下错误: 程序DEMO编译

LINE/COL  ERROR
--------- -------------------------------------------------------------
4/2       PL/SQL: SQL Statement ignored
8/10      PLS-00403: expression 'NET.NETSALARY' cannot be used as an INTO-target of a SELECT/FETCH statement
8/24      PL/SQL: ORA-00904: : invalid identifier

错误:检查编译器日志
我在 sql 中用于此的代码是:

    create or replace procedure "DEMO" 
    as 
    begin 
        case when comm is null then 0.9*grosssalary 
        when comm<500 then 0.85*grosssalary 
        else 0.8*grosssalary end 
        into net.netsalary from (select salary+comm as grossSalary,comm from 
        employee) ;

         end ;
          /

我正在尝试将数据插入到表 netsalary 的列中。 请指出我哪里出错了? 提前谢谢你。

【问题讨论】:

  • 如果这是一个 Oracle 问题,您为什么要标记 MySQL 和 SQL Server?垃圾邮件标签会让你投反对票。

标签: sql oracle stored-procedures


【解决方案1】:

语法是

CREATE OR REPLACE PROCEDURE demo
AS
BEGIN
   INSERT INTO net (netsalary)
      SELECT CASE
                WHEN comm IS NULL THEN 0.9 * grosssalary
                WHEN comm < 500 THEN 0.85 * grosssalary
                ELSE 0.8 * grosssalary
             END
        FROM (SELECT salary + comm AS grossSalary, comm FROM employee);
END;

但它不会有什么好处。您插入的行数与 employee 表中的行数一样多,但您插入的所有行都是 netsalary 值 - 您甚至不知道它属于谁。

不知道表的描述,很难猜出你真正想要做什么。

  • 插入?可能缺少员工编号(或任何该列名称)
  • 更新?那是完全不同的命令

【讨论】:

  • 感谢您的帮助。是的,关于表格描述,你说得对。但我只为网络表创建了一列,即 .netsalary 用于示例目的。
  • 好的,就是这样。
猜你喜欢
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多