Oracle SQL:存储过程 - 对象无效

时间:2018-01-29 08:28:45

标签: oracle stored-procedures plsql

我正准备创建一个商店程序,它到目前为止一直有效。 (出于学习目的,我想将信用卡号码交给存储过程,该存储过程应返回相关的客户识别号码。) 但是,当我想使用

测试此过程时
BEGIN CC_TO_CID(:p1, :p2); 
END;

(输入数据是通过我的SQL IDE对话提交的) 它刚回来了:

  

SQL错误[6550] [65000]:ORA-06550:第1行,第7列:
PLS-00905   对象xyz.CC_TO_CID无效
ORA-06550:第1行,第7列:
  PL / SQL:忽略语句

这基本上意味着我的存储过程格式不正确,但我真的没有任何线索。

我的存储过程:

CREATE OR REPLACE PROCEDURE CC_TO_CID(in_cc_nr IN NUMBER(16,0), out_cid OUT NUMBER) IS
BEGIN
SELECT PM.CUSTOMER_ID INTO cid FROM "2_PAYMENT_M" PM, 
"2_CREDITCARD" CC
WHERE CC.CC_NR=in_cc_nr AND CC.PAYMENT_M_NR=PM.PAYMENT_M_NR;
END;

我的表结构包含一些测试数据:

Table: "2_CREDITCARD"
       CC_NR         PAYMENT_M_NR       NAME       CVV         EXPIRES        
 ------------------ -------------- -------------- ----- --------------------- 
  5307458270409047              1   Haley Harrah    52   2019-11-01 00:00:00  



Table: "2_PAYMENT_M"
  PAYMENT_M_NR   CUSTOMER_ID         CREATED         TRANSACTION_LIMIT  
 -------------- ------------- --------------------- ------------------- 
             1           100   2018-01-21 00:00:00               1.000  

提前致谢! 我感谢任何有用的提示。

1 个答案:

答案 0 :(得分:1)

编译过程时会出现错误,但它可能非常通用。您的客户可能会支持class MyClass extends SubClass { call(): void { RootClass.prototype.call.call(this); } } ,或者您可以查询show errors视图以查看详细信息。

您无法为某个功能或程序指定the data type of a formal parameter的尺寸或精度限制,因此user_errors应为NUMBER(10,0);并且您的NUMBER子句中的参数名称错误。

into

我已经切换到ANSI连接语法,因为......好吧,只是因为。未经测试,因为我没有你的桌子;如果仍然出现错误,请再次检查CREATE OR REPLACE PROCEDURE CC_TO_CID(in_cc_nr IN NUMBER, out_cid OUT NUMBER) IS BEGIN SELECT PM.CUSTOMER_ID INTO out_cid FROM "2_PAYMENT_M" PM JOIN "2_CREDITCARD" CC ON CC.PAYMENT_M_NR=PM.PAYMENT_M_NR WHERE CC.CC_NR=in_cc_nr; END;