Plsql 如果在PL/SQL存储过程中DECLARE是可选的,为什么DECLARE存在?
我被告知可以在存储过程的声明部分省略Plsql 如果在PL/SQL存储过程中DECLARE是可选的,为什么DECLARE存在?,plsql,declare,Plsql,Declare,我被告知可以在存储过程的声明部分省略declare关键字。对于声明部分,declare关键字是可选的吗?如果是,那它为什么存在呢 create or replace procedure myproc is -- starting Declaration section DECLARE -- is DECLARE keyword optional? Can i omit it here? cursor mycursor as select ...; var1 number; var2 varc
declare
关键字。对于声明部分,declare
关键字是可选的吗?如果是,那它为什么存在呢
create or replace procedure myproc is
-- starting Declaration section
DECLARE -- is DECLARE keyword optional? Can i omit it here?
cursor mycursor as
select ...;
var1 number;
var2 varchar2;
-- end of Declaration section
BEGIN
...
END myproc;
匿名块:
DECLARE
/* declaration section */
BEGIN
/* code execution */
END;
存储过程:
CREATE OR REPLACE PROCEDURE example_proc
IS
/* declaration section */
BEGIN
/* code execution */
END;
功能:
CREATE OR REPLACE FUNCTION example_fun RETURN NUMBER
IS
/* declaration section */
BEGIN
/* code execution */
END;
在匿名块中,当需要声明部分时(当需要声明某些内容时),即变量时,使用声明部分:
DECLARE
l_var NUMBER;
BEGIN
SELECT 1
INTO l_var
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(l_var));
END;
-- anonymous block completed
-- 1
有时您不需要申报任何东西,例如:
CREATE OR REPLACE PACKAGE my_print IS
PROCEDURE my_line;
END my_print;
-- PACKAGE MY_PRINT compiled
CREATE OR REPLACE PACKAGE BODY my_print IS
PROCEDURE my_line
IS
/* nothing to declare */
BEGIN
DBMS_OUTPUT.PUT_LINE('a string');
END my_line;
END my_print;
-- PACKAGE BODY MY_PRINT compiled
/* nothing to declare */
BEGIN
my_print.my_line;
END;
-- anonymous block completed
-- a string
…或者简单地说:
/* nothing to declare */
BEGIN
DBMS_OUTPUT.PUT_LINE('a string');
END;
…或:
BEGIN
INSERT INTO a_table
SELECT * FROM b_table WHERE d_date > TO_DATE('2013-01-01','YYYY-MM-DD');
COMMIT;
END;
是否清楚?以下是创建pl/sql过程的语法。变量和游标的声明是基于需要的,不是强制性的。因此,如果要声明,请声明或忽略:
CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ]
IS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [procedure_name];
还需要添加Declare
关键字未在过程中使用,因为声明块隐式存在
编辑:
Declare关键字用于Declare块不是隐式的情况。假设匿名块,现在您需要指定Declare块,否则将没有地方声明变量
匿名块的语法:
DECLARE
<constant name> CONSTANT <data type> := <value>;
<constant name> CONSTANT <data type> DEFAULT <value>;
BEGIN
<valid statement>;
EXCEPTION
<exception handler>;
END;
声明
常数:=;
持续违约;
开始
;
例外情况
;
结束;
谢谢,我看过很多程序……有时在声明部分的开头使用了DECLARE
关键字,有时,声明部分在开始时没有DECLARE
请参见我的编辑。另外,如果您可以发布或指向使用declare关键字的示例,那么我将能够解释,我没有看到任何declare关键字。如果使用局部变量,declare关键字将在触发器主体的开头使用。(实际上,触发器主体是匿名块)。
DECLARE
<constant name> CONSTANT <data type> := <value>;
<constant name> CONSTANT <data type> DEFAULT <value>;
BEGIN
<valid statement>;
EXCEPTION
<exception handler>;
END;