Oracle 11g 代码上的 PL/SQL 是在执行存储过程时
Posted
技术标签:
【中文标题】Oracle 11g 代码上的 PL/SQL 是在执行存储过程时【英文标题】:PL/SQL on Oracle 11g code is when executing stored procedure 【发布时间】:2013-10-02 00:26:38 【问题描述】:我在这里要做的不是一遍又一遍地运行插入代码,这就是我决定创建存储过程的原因。下面是存储过程的脚本,它创建成功,但是当我执行存储过程“BEGIN SP_INSERT_PMC_UPDATE_DP; END;”我收到一条错误消息“*在调用 SP_INSERT_PMC_UPDATE_DP* 时参数的数量或类型错误”
我对此的思路和sp代码是:
1- 我检查 PMC_UPDATE_DP 中是否有记录,并将该值放入 RECORD_COUNT。
2- 现在,如果 RECORD_COUNT 大于零,我想清除 PMC_UPDATE_DP 表中的所有记录。
3- 如果 RECORD_COUNT 等于 0,那么我想将 EXTERNAL_PMC_UPDATE_FD 表中的数据插入 PMC_UPDATE_DP。
CREATE OR REPLACE PROCEDURE PMC.SP_INSERT_PMC_UPDATE_DP
(RECORD_COUNT OUT NUMBER) --Is my issue here???
IS
BEGIN
--Returns the total records and adds the value to RECORD_COUNT variable.
SELECT COUNT(*)
INTO RECORD_COUNT
FROM PMC.PMC_UPDATE_DP;
--Condition to see if RECORD_COUNT is greater than zero and dumps data to clear out PMC.PMC_UPDATE_DP table.
IF RECORD_COUNT > 0 THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE PMC.PMC_UPDATE_DP';
END IF;
--Condition to see if RECORD_COUNT equals zero. If true insert data into PMC_UPDATE_DP table from the PMC.EXTERNAL_PMC_UPDATE_FD table.
IF RECORD_COUNT = 0 THEN
INSERT INTO PMC.PMC_UPDATE_DP
( JOB_ID,
CONTROL_ID,
ACCT_NO,
CALC_DIVIDEND,
CERT_NEW_SHARES,
CALC_CASH_DISBURSMENT,
DECEASED,
STATUS,
ALPHA_SP1,
ALPHA_SP2,
ALPHA_SP3,
ALPHA_SP4,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
DONT_CALL,
DONT_MAIL
)
SELECT JOB_ID,
CONTROL_ID,
ACCT_NO,
CALC_DIVIDEND,
CERT_NEW_SHARES,
CALC_CASH_DISBURSMENT,
DECEASED,
STATUS,
ALPHA_SP1,
ALPHA_SP2,
ALPHA_SP3,
ALPHA_SP4,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
DONT_CALL,
DONT_MAIL
FROM PMC.EXTERNAL_PMC_UPDATE_FD
COMMIT;
END IF;
END;
【问题讨论】:
【参考方案1】:如果您想调用带有OUT
参数的过程,您需要传入一个局部变量,以便Oracle 有一些东西来保存输出。
DECLARE
l_record_count pls_integer;
BEGIN
PMC.SP_INSERT_PMC_UPDATE_DP ( l_record_count );
-- Do something with l_record_count, probably not just calling dbms_output
-- dbms_output.put_line( 'Record count = ' || l_record_count );
END;
如果您不打算对输出做任何事情,也许您真的不希望该过程具有OUT
参数。也许您只是想将record_count
声明为局部变量。
【讨论】:
以上是关于Oracle 11g 代码上的 PL/SQL 是在执行存储过程时的主要内容,如果未能解决你的问题,请参考以下文章
在 Oracle 11g Express Edition 中运行 PL/SQL 代码 - 错误
从 pl/sql 中的函数返回数据作为光标而不创建类型 oracle 11g