718 lines
14 KiB
SQL
718 lines
14 KiB
SQL
create schema hw_sqlcode;
|
|
set current_schema = hw_sqlcode;
|
|
/* ---------anonymous block------------ */
|
|
/* no exception */
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
/* exception */
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
CREATE or replace procedure func1_1 IS
|
|
--PRAGMA AUTONOMOUS_TRANSACTION;
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN others THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func1_1();
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
/* commit rollback */
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
COMMIT;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
ROLLBACK;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
/* PRAGMA AUTONOMOUS_TRANSACTION; */
|
|
CREATE OR REPLACE FUNCTION func5() RETURN void
|
|
AS
|
|
DECLARE
|
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func5();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CREATE OR REPLACE FUNCTION func5_1() RETURN void
|
|
AS
|
|
DECLARE
|
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
|
a int;
|
|
BEGIN
|
|
RAISE NOTICE 'AUTONOMOUS_TRANSACTION SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
func5_1();
|
|
END;
|
|
/
|
|
CREATE or replace procedure func5_2 IS
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN others THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func5_2();
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
/* CALL function */
|
|
CREATE OR REPLACE FUNCTION func7() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func7();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
/* RAISE ERROR */
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
RAISE sqlstate 'AA666';
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
|
|
/* ---------function------------ */
|
|
/* no exception */
|
|
CREATE OR REPLACE FUNCTION func1() RETURN void
|
|
AS
|
|
BEGIN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
CALL func1();
|
|
|
|
/* exception */
|
|
CREATE OR REPLACE FUNCTION func2() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func2();
|
|
|
|
/* commit rollback */
|
|
CREATE OR REPLACE FUNCTION func3() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
COMMIT;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func3();
|
|
|
|
CREATE OR REPLACE FUNCTION func4() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
ROLLBACK;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func4();
|
|
|
|
/* PRAGMA AUTONOMOUS_TRANSACTION; */
|
|
CREATE OR REPLACE FUNCTION func5() RETURN void
|
|
AS
|
|
DECLARE
|
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE FUNCTION func6() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func5();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func6();
|
|
|
|
/* CALL function */
|
|
CREATE OR REPLACE FUNCTION func7() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE FUNCTION func8() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
func7();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func8();
|
|
/* RAISE ERROR */
|
|
CREATE OR REPLACE FUNCTION func9() RETURN void
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
RAISE sqlstate 'AA666';
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL func9();
|
|
|
|
|
|
/* ---------PROCEDURE------------ */
|
|
/* no exception */
|
|
CREATE OR REPLACE PROCEDURE proc1()
|
|
AS
|
|
BEGIN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
|
|
CALL proc1();
|
|
|
|
/* exception */
|
|
CREATE OR REPLACE PROCEDURE proc2()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc2();
|
|
|
|
/* commit rollback */
|
|
CREATE OR REPLACE PROCEDURE proc3()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
COMMIT;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc3();
|
|
|
|
CREATE OR REPLACE PROCEDURE proc4()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
ROLLBACK;
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc4();
|
|
|
|
/* PRAGMA AUTONOMOUS_TRANSACTION; */
|
|
CREATE OR REPLACE PROCEDURE proc5()
|
|
AS
|
|
DECLARE
|
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc6()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
proc5();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc6();
|
|
|
|
/* CALL function */
|
|
CREATE OR REPLACE PROCEDURE proc7()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
a := 1/0;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc8()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
proc7();
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc8();
|
|
/* RAISE ERROR */
|
|
CREATE OR REPLACE PROCEDURE proc9()
|
|
AS
|
|
DECLARE
|
|
a int;
|
|
BEGIN
|
|
RAISE sqlstate 'AA666';
|
|
EXCEPTION
|
|
WHEN DIVISION_BY_ZERO THEN
|
|
RAISE NOTICE 'SQLSTATE = %, SQLCODE = %, SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
|
|
END;
|
|
/
|
|
CALL proc9();
|
|
|
|
DROP SCHEMA hw_sqlcode CASCADE;
|
|
|
|
create schema hw_cursor_state;
|
|
set current_schema = hw_cursor_state;
|
|
set behavior_compat_options='COMPAT_CURSOR';
|
|
/* ---------anonymous block------------ */
|
|
|
|
/*create*/
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
create table tb_test(col1 int);
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/* select */
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
select 1 into v_count;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/* insert */
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
insert into tb_test select 1;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/* update */
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test set col1=2;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/* delete */
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
delete from tb_test;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
|
|
/*Same layer*/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc_test1()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc_test2()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test set col1=2;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
proc_test2();
|
|
proc_test1();
|
|
end
|
|
/
|
|
|
|
/*EXCEPTION*/
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
update tb_test11 set col1=2;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
EXCEPTION
|
|
when others then
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test11 set col1=2;
|
|
EXCEPTION
|
|
when others then
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/*COMMIT ROLLBACK*/
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test set col1=2;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
COMMIT;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test set col1=2;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
ROLLBACK;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/* PRAGMA AUTONOMOUS_TRANSACTION */
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
DECLARE
|
|
v_count int;
|
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
|
BEGIN
|
|
v_count := 1;
|
|
update tb_test set col1=2;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
|
|
/*drop*/
|
|
CREATE OR REPLACE PROCEDURE proc_test()
|
|
as
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
drop table tb_test;
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
DECLARE
|
|
v_count int;
|
|
BEGIN
|
|
v_count := 1;
|
|
proc_test();
|
|
RAISE NOTICE '%',v_count||','||SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end
|
|
/
|
|
create table staff(id int, name varchar2(10));
|
|
insert into staff values(1, 'xiaoming1');
|
|
insert into staff values(2, 'xiaoming2');
|
|
insert into staff values(3, 'xiaoming');
|
|
insert into staff values(4, 'xiaoming4');
|
|
|
|
CREATE OR REPLACE FUNCTION fun_cursor1() return void AS
|
|
DECLARE
|
|
BEGIN
|
|
insert into staff values(3, 'xiaoming');
|
|
dbe_output.print_line('cursor after insert');
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
SAVEPOINT my_savepoint;
|
|
dbe_output.print_line('cursor after savepoint');
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
update staff set name = 'wdc1' where id = 1;
|
|
dbe_output.print_line('cursor after update');
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
ROLLBACK TO SAVEPOINT my_savepoint;
|
|
dbe_output.print_line('cursor after rollback to savepoint');
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE fun_cursor2() AS
|
|
DECLARE
|
|
BEGIN
|
|
fun_cursor1();
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
IF SQL%FOUND THEN
|
|
dbe_output.print_line('cursor effective');
|
|
END IF;
|
|
delete from staff where id = 3;
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
call fun_cursor2();
|
|
|
|
CREATE OR REPLACE FUNCTION fun_cursor1() return void AS
|
|
DECLARE
|
|
BEGIN
|
|
insert into staff values(3, 'xiaoming');
|
|
update staff set name = 'zcna' where id = 1;
|
|
--commit;
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
RAISE division_by_zero;
|
|
end;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE fun_cursor2() AS
|
|
DECLARE
|
|
BEGIN
|
|
fun_cursor1();
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
IF SQL%FOUND THEN
|
|
dbe_output.print_line('cursor effective');
|
|
END IF;
|
|
delete from staff where id = 3;
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
EXCEPTION
|
|
WHEN division_by_zero THEN
|
|
RAISE NOTICE 'test:% ... %',SQLCODE,SQLSTATE;
|
|
RAISE NOTICE '%',SQL%FOUND ||','||SQL%NOTFOUND ||','||SQL%ISOPEN || ',' || SQL%ROWCOUNT;
|
|
end;
|
|
/
|
|
|
|
call fun_cursor2();
|
|
|
|
set behavior_compat_options = '';
|
|
DROP SCHEMA hw_cursor_state CASCADE;
|
|
|
|
|