【发布时间】:2020-03-11 23:16:59
【问题描述】:
我有这个问题,我正在尝试解决并在下面找到我迄今为止解决的问题。虽然存储过程没有错误但调用它我得到这个错误:
第 2 行出现错误:ORA-06550:第 2 行第 3 列:PLS-00306:错误 调用“PUB_JOB_COUNT”ORA-06550 的参数数量或类型: 第 2 行第 3 列:PL/SQL:语句被忽略
要求:
在数据库中创建一个存储的 PL/SQL 过程对象。步骤 应插入出版商的名称、城市、电话号码和 他/她在 PublisherDetails 表中请求的工作数量(计数) 对于请求少于三个打印作业的每个发布者,否则 该程序应在屏幕上显示随后的出版商名称 按每个工作的工作编号、工作开始日期和工作完成日期 他/她要求。屏幕输出(提示:使用连接运算符 ‘||’) 应采用以下格式:
请有人帮帮我吗?
出版商名称:Addison-Wesley
JobNo Start Date Completion Date
12 17-JAN-14 25-JAN-14
14 28-FEB-14 01-APR-14
最后,NO-DATA-FOUND 异常应该在 EXCEPTION 部分和屏幕上显示的消息(提示:使用 Oracle 提供的 DBMS_OUTPUT.put_line 过程)通知用户 如果出现这样的错误。请注意,为了 DBMS_OUTPUT.put_line 要在 SQL*Plus 中工作,您应该首先设置 SERVEROUTPUT。你应该 通过调用过程检查过程是否正确执行 检查 PublisherDetails 表的内容。请执行下列操作: a) 使用创建表所需的代码创建一个脚本文件 PublisherDetails 和数据库中的 PL/SQL 过程; b) 创建一个 第二个脚本文件,包含以下内容: • 清除 SQL 语句 PublisherDetails 表的内容; • PL/SQL 匿名块 调用(执行)PL/SQL 过程的语句; • 一个选择 语句选择 PublisherDetails 表中的所有记录。
我的桌子
publisher(publisherName, publisherCity, phoneNo)
pk
printJob(JobNo, startDate, complitionDate, publisherName)
pk fk(publisher)
publisherdetails(publisherName, publisherCity, phoneNo, JobNo)
pk
代码:
CREATE OR REPLACE PROCEDURE PUB_JOB_COUNT (
JOBNO IN NUMBER
) AS
PUBLISHERNAME PRINTJOB.PUBLISHERNAME%TYPE;
NOTFOUND EXCEPTION;
CURSOR PUBCURSOR IS
SELECT PUBLISHER.PUBLISHERNAME,
PUBLISHER.PUBLISHERCITY,
PUBLISHER.PHONENO,
PRINTJOB.STARTDATE,
PRINTJOB.COMPLETIONDATE,
SUM(JOBNO) AS NUMOFJOBS
FROM PUBLISHER
INNER JOIN PRINTJOB ON PUBLISHER.PUBLISHERNAME = PRINTJOB.PUBLISHERNAME
GROUP BY PUBLISHER.PUBLISHERNAME,
PUBLISHER.PUBLISHERCITY,
PUBLISHER.PHONENO,
PRINTJOB.STARTDATE,
PRINTJOB.COMPLETIONDATE;
PUBREC PUBCURSOR%ROWTYPE;
BEGIN
OPEN PUBCURSOR;
FOR PRINTJOB IN PUBCURSOR LOOP
PUBLISHERNAME := PRINTJOB.PUBLISHERNAME;
DBMS_OUTPUT.PUT_LINE('Publisher Name : ' || PRINTJOB.PUBLISHERNAME);
LOOP
FETCH PUBCURSOR INTO PUBREC;
EXIT WHEN PUBCURSOR%NOTFOUND;
IF PUBREC.NUMOFJOBS <= 3 THEN INSERT INTO PUBLISHERDETAILS VALUES (
PUBREC.PUBLISHERNAME,
PUBREC.PUBLISHERCITY,
PUBREC.PHONENO,
PUBREC.NUMOFJOBS
);
ELSE DBMS_OUTPUT.PUT_LINE(PUBREC.NUMOFJOBS
|| ' '
|| PUBREC.STARTDATE
|| ' '
|| PUBREC.COMPLETIONDATE);
END IF;
END LOOP;
END LOOP;
CLOSE PUBCURSOR;
COMMIT;
EXCEPTION
WHEN NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Record Not Found');
END;
从下面的 cmets 中收集到,用于执行该过程的代码:
BEGIN
pub_Job_Count;
End;
【问题讨论】:
-
您展示了除了最重要的部分之外的所有内容 - 您的代码用于调用 PUB_JOB_COUNT。这就是错误的来源。
-
您好,调用我的存储过程的代码是:BEGIN pub_Job_Count;结束;
-
那是你的问题,你需要给它一个号码,jobNo 根据你的程序定义
标签: sql stored-procedures plsql oracle-sqldeveloper sqlplus