1

这里有一些简单的问题,但我已经工作了这么多小时无法集中注意力,所以希望其他头脑清醒的人可以回答这个简单的问题,我似乎无法在 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 语句 06550 中应有一个 INTO 子句。00000 -“行 %s,列 %s:\n%s” *原因:通常是 PL /SQL 编译错误。

另外,当我向它发送硬编码数字时,我创建了一个存储过程并可以工作,但是我需要将前面查询中提到的申请人信用记录的记录数传递给它,这正是我真正想要的。执行存储过程在上述块中的工作方式是否与在块外的工作方式相同。那么这应该工作吗?

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" 以继续。

在这里碰壁,感谢您的帮助!

4

2 回答 2

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 块内使用执行语句(除非它是完全不同的立即执行)。因此,您可以按如下方式修改代码:-

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

于 2013-03-14T02:24:23.857 回答
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;
/
于 2013-03-14T14:14:49.597 回答