【问题标题】:Can't create Oracle Sql Package Stored Procedure无法创建 Oracle Sql 包存储过程
【发布时间】:2014-01-28 13:33:32
【问题描述】:

我正在尝试创建一个包含在 Oracle 中使用的存储过程的包

在检查所有表字段后编译和执行时,

我有SQL statement ignoredORA-00926 for VALUES

您能否告诉我是否有任何检查这些错误的指南或者我应该关注什么语法?

下面是我的 SQL 脚本

CREATE OR REPLACE PACKAGE BODY TESTAS 
    PROCEDURE GETREPORT01 IS
        BEGIN
            EXECUTE IMMEDIATE "TRUNCATE TABLE TESTER.TEST_TB1";

            INSERT INTO TESTER.TEST_TB1
                SELECT 
                    ACCOUNT_NUMBER, 
                    SERVICE_ADDRESS_ID, 
                    BILLING_CYCLE, 
                    CUSTOMER_STATUS,  
                    CUSTOMER_TYPE, 
                    SUKET_NEW
            FROM 
                ABC.DWH_BUCKETS
            WHERE 
                CUSTOMER_TYPE = 'DIY'
            ORDER BY 
                DECODE(CUSTOMER_STATUS, 'AC', 1, 'IN', 2, 3) DESC;
    END GETREPORT01;

【问题讨论】:

  • TEST_TB1 的列有哪些?
  • ACCOUNT_NUMBER、SERVICE_ADDRESS_ID、BILLING_CYCLE、CUSTOMER_STATUS、CUSTOMER_TYPE、SUKET_NEW
  • 如果你问题中的代码是你正在使用的完整代码,我认为你需要最后关闭包
  • 如果与您的表 TESTER.TEST_TB1 匹配,您是否检查了表 ABC.DWH_BUCKETS 的列类型?
  • 根据ora手册:ERROR MESSAGE ORA-00926: missing VALUES keyword CAUSE OF ERROR You tried to execute a SQL INSERT statement and missed the VALUES keyword.

标签: sql oracle package


【解决方案1】:

试试这个查询:

CREATE OR REPLACE PACKAGE PKG_TEST IS 
PROCEDURE GETREPORT01;
END;
/
CREATE OR REPLACE PACKAGE BODY PKG_TEST AS 
    PROCEDURE GETREPORT01 IS
        BEGIN
            EXECUTE IMMEDIATE "TRUNCATE TABLE TESTER.TEST_TB1";

            INSERT INTO TESTER.TEST_TB1
                SELECT 
                    ACCOUNT_NUMBER, 
                    SERVICE_ADDRESS_ID, 
                    BILLING_CYCLE, 
                    CUSTOMER_STATUS,  
                    CUSTOMER_TYPE, 
                    SUKET_NEW
            FROM 
                ABC.DWH_BUCKETS
            WHERE 
                CUSTOMER_TYPE = 'DIY'
            ORDER BY 
                DECODE(CUSTOMER_STATUS, 'AC', 1, 'IN', 2, 3) DESC;
    END GETREPORT01;
END;   
/

【讨论】:

    【解决方案2】:

    根据您的代码,您在第一行缺少IS 关键字,在最后一行缺少END;

    CREATE OR REPLACE PACKAGE BODY TESTAS IS
    
        PROCEDURE GETREPORT01 IS
            BEGIN
                EXECUTE IMMEDIATE "TRUNCATE TABLE TESTER.TEST_TB1";
    
                INSERT INTO TESTER.TEST_TB1
                    SELECT 
                        ACCOUNT_NUMBER, 
                        SERVICE_ADDRESS_ID, 
                        BILLING_CYCLE, 
                        CUSTOMER_STATUS,  
                        CUSTOMER_TYPE, 
                        SUKET_NEW
                    FROM 
                        ABC.DWH_BUCKETS
                    WHERE 
                        CUSTOMER_TYPE = 'DIY'
                    ORDER BY 
                        DECODE(CUSTOMER_STATUS, 'AC', 1, 'IN', 2, 3) DESC;
        END GETREPORT01;
    
    END TESTAS;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多