这里有一些简单的问题,但是我已经花了这么多时间而难以集中注意力,所以希望有新头脑的人可以回答这个简单的问题,我似乎无法找到一个对我有用的好答案SQL Developer
DECLARE
TEST123 NUMBER;
BEGIN
SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
SELECT * FROM APPLICANT_CREDIT;
END;
当我运行这个对我来说似乎很容易的时候我会收到错误:
错误报告: ORA-06550:第5行,第3栏: PLS-00428:此SELECT语句中需要一个INTO子句 06550. 00000 - “行%s,列%s:\ n%s” *原因:通常是PL / SQL编译错误。
此外,我发送了一个存储过程,当我发送硬编码的数字时,它会工作,但是我需要传递来自之前查询中提到的applicant_credit的记录计数,这是我实际上正在追求的。执行存储过程在上面的块中是否与块外部相同。那么这应该工作吗?
DECLARE
TEST123 NUMBER;
BEGIN
SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
EXECUTE UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);
SELECT * FROM APPLICANT_CREDIT;
END;
当我跑步时,我得到:
错误报告: ORA-06550:第5行,第11栏: PLS-00103:遇到以下任何一种情况时遇到符号“UPDATE_DECISION”:
:=。 (@%;立即 符号“:=”代替“UPDATE_DECISION”继续。
在这里碰壁,任何帮助都表示赞赏!!
答案 0 :(得分:2)
对于第一个sql语句,您将收到该错误,因为您无法以这种方式在plsql块中执行select *语句。您可以使用游标或批量收集语句或任何其他方式将select *的输出“重定向”到记录集合中。
DECLARE
TEST123 NUMBER;
cursor c_cur
is select col_1, col_2 from application_credit;
BEGIN
SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
-- loop through the cursor if required
END;
你的第二个sql语句给出了一个错误,因为你不能在plsql块中使用execute语句(除非它是execute immediate,这是完全不同的)。因此,您可以按如下方式修改代码: -
DECLARE
TEST123 NUMBER;
cursor c_cur is
select col1, col2 from applicant_credit;
BEGIN
SELECT COUNT(APP_ID) INTO TEST123 FROM applicant_credit;
UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);
-- loop through the cursor if required
END;
一些有用的链接: -
http://www.techonthenet.com/oracle/cursors/declare.php
http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html
答案 1 :(得分:0)
除非您正在尝试学习它,否则根本不需要PL / SQL。所有这些都只能用SQL完成。
DECLARE
TEST123 NUMBER:= 0;
BEGIN
UPDATE_DECISION(102, 1, 1, 1, 1, TEST123);
-- The outer query is not required, this is only to show you the correct syntax.
SELECT * INTO TEST123 -- you are selecting from applicant_credit
FROM
(
SELECT COUNT(app_id) FROM applicant_credit
);
END;
/