【问题标题】:Why do I get Declare Identifier and many other errors in PL SQL package?为什么我在 PL SQL 包中出现 Declare Identifier 和许多其他错误?
【发布时间】:2016-06-29 13:44:21
【问题描述】:

我正在尝试在 Toad 中创建一个 PL SQL 包。我点击“编译为脚本”。它说创建了包但有编译错误;我得到了这个巨大的错误列表,但我想从第一个开始。

这是我的代码的前几行(包很大,显然不想全部发布)

CREATE OR REPLACE PACKAGE cop_cow_scripts AS
TYPE arr_claims_t IS VARRAY(15000) OF VARCHAR2(10);
TYPE arr_sql_t IS VARRAY(500) OF VARCHAR2(1000);

-- declaring procedure that will call COP_DATALOAD_V2 and COW_DATALOAD
PROCEDURE COP_COW_DATALOAD_V2(claims_array arr_claims_t, sql_array arr_sql_t);

END cop_cow_scripts;


CREATE OR REPLACE PACKAGE BODY cop_cow_scripts AS


sql_statments arr_sql := arr_sql();--initialize a empty lis 

   /*                    PROCEDURE AND VARIABLE 
                    INITILIZATION FOR  COW_DATALOAD_V2
  /***************************************************************************/

--*********** PUT YOUR LIST OF CERTS BELOW ******************

v_certList arr_claims := arr_claims('3803617642', '3805126441', '3876849047'
, '3873116383', '3873306670', '3878876718'); 





 --COP VARIABLES---
new_copId number; --NEW COP ID 
prod_copId number; --PROD COP ID
new_seq_id number; --NEW SEQ ID  
suppl_count number; --supplemental count

v_SQL varchar2(7000);
v_certLst varchar2(2000);
n_success NUMBER := 0; --Count of success found
n_total NUMBER := 0; --Total Records proccessed
n_suppl NUMBER := 0; --Total Records proccessed
n_orders NUMBER := 0; --Total lmso orders downloaded


/*cop procedure*/
PROCEDURE COP_DATALOAD_V2(arr_claims arr_claims_t, arr_sql arr_sql_t)
IS

在此之后我定义了我的第一个过程。

我得到的两种主要错误是: 4/19 PLS-00201:必须声明标识符“ARR_SQL” 4/19 PL/SQL:项目被忽略 12/16 PLS-00201:必须声明标识符“ARR_CLAIMS” 12/16 PL/SQL:项目被忽略 42/14 PLS-00320:此表达式类型的声明不完整或格式错误

... 等等。

我对 pl sql 很陌生。我什至不确定 4/19 或 12/16 是什么意思,因为它们似乎与行号不对应。

我在制作包裹时做错了什么?

【问题讨论】:

  • 在您的包规范中,您定义了arr_claims_tarr_sql_t 的类型。看起来在您的身体中,您正在尝试使用 arr_claimsarr_sql 类型。这些特定类型是否在任何地方定义(例如,作为全局类型,例如create type arr_sql ...,或作为包主体/规范中的类型?
  • 你是对的。我现在觉得很笨。你能帮我解释一下错误吗?哪个数字显示行号? TOAD 中是否有调试器或类似的东西以便更好地查看?再次感谢您!
  • 4/19 指的是包源中的第 4 行第 19 列,记住行号从 PACKAGEPACKAGE BODY 行开始。在您的情况下,错误在包体中,因此您必须从 PACKAGE BODY 行开始计数。

标签: sql oracle plsql


【解决方案1】:

问题似乎很简单,您声明 sql_statmentsv_certList 变量类型错误(缺少'_t'):

正确的声明是:

sql_statments arr_sql_t := arr_sql_t();--initialize a empty lis 

v_certList arr_claims_t := arr_claims_t('3803617642', '3805126441', '3876849047'
, '3873116383', '3873306670', '3878876718'); 

【讨论】:

    【解决方案2】:

    很可能 arr_claims_t 是您的用户没有执行权限的类型。当 Oracle 尝试解析您的过程时,您的用户不知道这种类型,因此您会看到您看到的错误。

    作为具有 DBA 权限的用户,从 SQL Developer 或 Toad 等 GUI 客户端或从 SQLPlus 命令行运行

    GRANT EXECUTE ON arr_claims_t to <YourUser>;
    GRANT EXECUTE ON arr_sql_t to <YourUser>;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多