create or replace procedure myproc is
DECLARE
cursor mycursor as select 1 from dual;
var1 TABLE1%ROWTYPE;
BEGIN
NULL;
END myproc;
/*
PROCEDURE MYPROC compiled
Errors: check compiler log
*/
create or replace procedure myproc is
/* DECLARE */
cursor mycursor /*as*/ is select 1 from dual;
var1 TABLE1%ROWTYPE;
BEGIN
NULL;
END myproc;
/*
PROCEDURE MYPROC compiled
*/
匿名块:
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;
清楚吗?