在Oracle存储过程中选择引发PLS-00428

时间:2012-09-10 14:39:33

标签: oracle stored-procedures

我是Oracle的新手,我已经开始了一个需要我使用它的项目。我正在尝试创建一个新的存储过程,select语句有效,但是当我运行整个事情时,它会说:

[错误] PLS-00428(8:9):PLS-00428:此SELECT语句中需要INTO子句

以下是代码:

CREATE PROCEDURE SSACHDEV.CheckServiceProviderDownload
as

tempInt number;

BEGIN

    Select 
        distinct(trunc(dateStamp)), 
        SVCProviderSTTSSEQID, 
        CaseNbr 
        into 
        "Date",
        PrividerId,
        CaseNumber
    from SVCProviderSTTS 
    Where (trunc(datestamp) between trunc(sysdate - 1) and trunc(sysdate));




   -- tskmgr.task_priority_download (CaseNumber, Id, tempInt);

END;

我想我必须创建一个临时表来存储结果然后做一个游标来调用我已经注释掉的下一个程序叫做tskmgr.task_priority_download(CaseNumber,Id,tempInt);

非常感谢任何帮助。非常感谢你。

1 个答案:

答案 0 :(得分:2)

首先,我建议不要使用名为date的本地临时变量。在我看来,像myDate或Date1或其他任何东西都会更好。

其次,您必须声明这些变量 - Date,ProviderId和Casenumber。

例如,

CREATE PROCEDURE...
as
   tempInt NUMBER;
   myDate NUMBER;
   caseNumber VARCHAR2(100);
   ProviderId NUMBER;
BEGIN
...

最后,尽管它使事情变得有些冗长,但我倾向于为变量添加前缀,以便我可以告诉它们是变量。例如,我可能会这样做,但有些人会告诉我这是浪费和不必要的。

CREATE PROCEDURE...
as
   tempInt NUMBER;
   l_Date NUMBER;
   l_caseNumber VARCHAR2(100);
   l_ProviderId NUMBER;
BEGIN
...

以这种方式命名我的变量使我更容易理解我何时进行连接或where子句,并且列名与我的变量相同 - 你可以这样做。

虽然我对错误信息感到有点困惑。如果有必要的话,我会再看看并更新我的答案。