oracle可不可以只取游标里面第一个值。 不想循环。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle可不可以只取游标里面第一个值。 不想循环。相关的知识,希望对你有一定的参考价值。
oracle中如果只取第一个值,可以不用游标。
例如,以emp表为例。取出第一条记录。
示例代码:
v_empno number(4);
v_ename varchar2(20);
v_job varchar2(20);
v_mgr number(4);
v_hiredate varchar2(10);
v_sal number(10,2);
v_comm number(10,2);
v_deptno number(2);
begin
select empno,ename,job,mgr,to_char(hiredate,\'yyyy-mm-dd\'),sal,comm,deptno into
v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno
from emp where rownum<=1;
dbms_output.put_line(v_empno||\',\'||v_ename||\',\'||v_job||\',\'||v_mgr||\',\'||v_hiredate||\',\'||v_sal||\',\'||v_comm||\',\'||v_deptno);
end;
执行结果:
如果只取第一个值的话,就不用游标了。
直接用select col into aaaa from tab where rownum < 2;
以后处理的时候直接用 aaaa 就行啦。
如果一旦要用游标,可以采用xinjie_208 的方法。不用loop就行。 参考技术B open cur
fetch cur into 变量名
close cur;
其中cur为你的游标名本回答被提问者采纳 参考技术C 手工费
从 Oracle 游标中获取第一个值 - 从 Java 代码调用
【中文标题】从 Oracle 游标中获取第一个值 - 从 Java 代码调用【英文标题】:Get the first value from Oracle cursor - Calling From Java Code 【发布时间】:2021-03-01 07:36:58 【问题描述】:我创建了一个 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;
当我使用这些命令在 2 个单独的 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;
错误
Error starting at line : 32 in command -
declare
record_to_gets table_to_test%ROWTYPE;
begin
exec :record_to_gets := get_unlocked_records;
dbms_output.put_line(record_to_gets);
end;
Error report -
ORA-06550: line 4, column 7:
PLS-00103: Encountered the symbol "" when expecting one of the following:
:= . ( @ % ;
The symbol ";" was substituted for "" to continue.
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
我在这里做的错误是什么?
既然我的最终目标是在java中调用函数并得到结果,那么如何调用这个函数来获取java中的第一条记录呢?
提前致谢。
【问题讨论】:
【参考方案1】:EXEC[UTE] 是一个SQL*Plus
命令,在SQL*Plus
中使用冒号前置变量,但在PL/SQL
中可能会使用EXECUTE IMMEDIATE而在您的情况下不需要这样做,仅使用这样的 assignment 而不预先添加局部变量就足够了:
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;
/
【讨论】:
以上是关于oracle可不可以只取游标里面第一个值。 不想循环。的主要内容,如果未能解决你的问题,请参考以下文章