从Oracle游标获取第一个值-从Java代码调用
我有一个oracle游标,我创建它是为了促进并发性。这是我的光标从Oracle游标获取第一个值-从Java代码调用,oracle,plsql,oracle11g,stored-functions,Oracle,Plsql,Oracle11g,Stored Functions,我有一个oracle游标,我创建它是为了促进并发性。这是我的光标 create or replace FUNCTION get_unlocked_records RETURN table_to_test%ROWTYPE IS CURSOR c IS SELECT * FROM table_to_test where status_code = 5 FOR UPDATE SKIP LOCKED; record_to_get table_to_test%ROWTYPE; BEGIN
create or replace FUNCTION get_unlocked_records RETURN table_to_test%ROWTYPE IS
CURSOR c IS SELECT * FROM table_to_test where status_code = 5 FOR UPDATE SKIP LOCKED;
record_to_get table_to_test%ROWTYPE;
BEGIN
OPEN c;
FETCH c INTO record_to_get;
CLOSE c;
RETURN record_to_get;
END;
当我使用这些命令在两个单独的sql会话中进行测试时,会出现以下错误
declare
record_to_gets table_to_test%ROWTYPE;
begin
exec :record_to_gets := get_unlocked_records;
dbms_output.put_line(record_to_gets);
end;
错误
我在这里犯了什么错误
既然我的最终目标是在java中调用该函数并获得结果,那么如何调用该函数以获得java中的第一条记录呢
提前感谢。EXEC[UTE]是一个
SQL*Plus
命令,在SQL*Plus
中使用冒号作为变量的前缀,但是在PL/SQL
中可以使用EXECUTE IMMEDIATE,而在您的情况下不需要这样做,仅使用这样的赋值而不预加局部变量就足够了:
DECLARE
record_to_gets table_to_test%ROWTYPE;
BEGIN
record_to_gets := get_unlocked_records;
DBMS_OUTPUT.PUT_LINE(record_to_gets.col1);
DBMS_OUTPUT.PUT_LINE(record_to_gets.col2)
END;
/
DECLARE
record_to_gets table_to_test%ROWTYPE;
BEGIN
record_to_gets := get_unlocked_records;
DBMS_OUTPUT.PUT_LINE(record_to_gets.col1);
DBMS_OUTPUT.PUT_LINE(record_to_gets.col2)
END;
/