错误:无法在 PL/SQL 中使用选择创建过程

Posted

技术标签:

【中文标题】错误:无法在 PL/SQL 中使用选择创建过程【英文标题】:Error: Cant create procedure with select in PL/SQL 【发布时间】:2020-02-03 21:35:23 【问题描述】:

我正在包中创建一个过程,我想做一个简单的选择,但我得到了这个错误。

create or replace PACKAGE PK_MAC AS
   /* TODO enter package declarations (types, exceptions, methods etc) here */ 
    PROCEDURE PR_PRUEBAS (
        IDNUM NUMBER := 0, 
        NOMBRES VARCHAR2 := 'Usuario', 
        FECHANACIMIENTO DATE := SYSDATE, 
        ARCHIVOS CLOB := ''
    )
    IS
    BEGIN
        SELECT * FROM MAC;
    END;
END;

错误:

错误(6,3):PLS-00103:在预期以下之一时遇到符号“BEGIN”:语言“

【问题讨论】:

“简单的SELECT 语句”不是 PL/SQL 过程中的有效语句。就那么简单。这与更高级的错误完全不同,即程序代码属于包bodydeclaration 包(CREATE OR REPLACE PACKAGE 语句)仅声明过程,包括其参数及其数据类型等 - 但它不能包含过程代码(从 BEGINEND) - 必须在包体中。 【参考方案1】:

包由其规范和主体组成。例如:

SQL> create or replace package pk_mac as
  2    procedure pr_pruebas (p_idnum in number);
  3  end;
  4  /

Package created.

SQL> create or replace package body pk_mac as
  2    procedure pr_pruebas (p_idnum in number)
  3    is
  4      l_ename emp.ename%type;
  5    begin
  6      select ename
  7      into l_ename
  8      from emp
  9      where empno = p_idnum;
 10
 11      dbms_output.put_line(l_ename);
 12    end;
 13  end;
 14  /

Package body created.

测试:

SQL> set serveroutput on
SQL>
SQL> exec pk_mac.pr_pruebas(7654);
MARTIN

PL/SQL procedure successfully completed.

SQL>

或者,在你的情况下:

SQL> create or replace PACKAGE PK_MAC AS
  2    PROCEDURE PR_PRUEBAS
  3      (IDNUM NUMBER := 0,
  4       NOMBRES VARCHAR2 := 'Usuario',
  5       FECHANACIMIENTO DATE := SYSDATE,
  6       ARCHIVOS CLOB := '');
  7  end;
  8  /

Package created.

SQL>
SQL> create or replace PACKAGE body PK_MAC AS
  2    PROCEDURE PR_PRUEBAS
  3      (IDNUM NUMBER := 0,
  4       NOMBRES VARCHAR2 := 'Usuario',
  5       FECHANACIMIENTO DATE := SYSDATE,
  6       ARCHIVOS CLOB := '')
  7    is
  8    begin
  9      null;
 10    end;
 11  end;
 12  /

Package body created.

SQL>

请注意 - 当您在 PL/SQL 中使用 select 语句时 - 您必须将结果 into 放入某些东西(例如变量,就像我在示例中所做的那样)。你不能只是SELECT * FROM MAC ...

【讨论】:

以上是关于错误:无法在 PL/SQL 中使用选择创建过程的主要内容,如果未能解决你的问题,请参考以下文章

带有参数的 PL/SQL 过程/函数从选择查询返回表

PL SQL 过程错误

当我选择 [关闭] 时,我在正文包 pl/sql 中遇到问题

PL/SQL: SQL 语句被忽略 - 创建一个过程得到编译错误

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

无法从 SQL*Plus 创建和执行 PL/SQL 过程