从Oracle游标获取第一个值-从Java代码调用

从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

我有一个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
        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;
/