错误:无法在 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 过程中的有效语句。就那么简单。这与更高级的错误完全不同,即程序代码属于包body; declaration 包(CREATE OR REPLACE PACKAGE
语句)仅声明过程,包括其参数及其数据类型等 - 但它不能包含过程代码(从 BEGIN
到 END
) - 必须在包体中。
【参考方案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: SQL 语句被忽略 - 创建一个过程得到编译错误
oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下: