当前位置:首页 » 编程语言 » oracle游标动态sql

oracle游标动态sql

发布时间: 2022-04-17 08:41:03

⑴ 如何实现Oracle数据库中的动态游标

  • createorreplaceprocereP_TEST_sqlis

  • TYPEref_cursor_typeISREFCURSOR;--定义一个动态游标

  • tablenamevarchar2(200)default'ess_client';

  • v_sqlvarchar2(1000);

  • mobilevarchar2(15);

  • usrsref_cursor_type;

  • begin

  • --使用连接符拼接成一条完整SQL

  • v_sql:='selectusrmsisdnfrom'||tablename||'whererownum<11';

  • --打开游标

  • openusrsforv_sql;

  • loop

  • fetchusrsintomobile;

  • exitwhenusrs%notfound;

  • insertintotmp(usrmsisdn)values(mobile);

  • endloop;

  • closeusrs;

  • commit;

  • endP_TEST_SQL;

⑵ oracle中SQL动态传参数问题

open rc;
cursor param_value IS
名称不一致呢,下面的游标名称为rc,一开始定义的游标名称是param_value

fetch rc
into v_column_name, v_table_name;

这样导致 v_column_name未能取到值,
所以sql_str 中的v_column_name 的值不能取到

⑶ oracle的动态查询和sql server的动态查询有什么区别

DECLARE

strsqlVARCHAR2(100):=‘SELECT*FROMempWHEREempno=7788‘;

emp_recordemp%ROWTYPE;

BEGIN

EXECUTEIMMEDIATEstrsqlINTOemp_record;

dbms_output.put_line(姓名:||emp_record.ename||,岗位:||emp_record.job);

END;


以上是Oracle的动态sql语法




而SQLServer一般使用的是sp_executesql 函数,它可以执行动态的修改,查询,删除功能。

Sp_executesql:执行可以多次重复使用或动态生成的Transact-SQL语句或批处理。Transact-SQL语句或批处理可以包含嵌入参数。
语法:
sp_executesql[@statement=]statement
[
{,[@params=]N'@parameter_namedata_type[OUT|OUTPUT][,...n]'}
{,[@param1=]'value1'[,...n]}
]

⑷ 请问oracle动态游标和静态游标最大的区别是什么啊,谢谢

静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的。动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。从这个角度来说,静态游标的效率也比动态游标更高一些。

⑸ 我要写一个oracle的存储过程,需要用到一个动态的游标,因为表名和字段个数都是变的,所以我想传入sql语句

SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 动态SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打开游标.
10 OPEN v_cursor FOR v_SQL;
11 -- 循环处理.
12 LOOP
13 -- 填充数据.
14 FETCH v_cursor INTO v_name;
15 -- 无数据时 退出循环.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 输出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 关闭游标.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 发生异常时,如果游标还打开,那么关闭掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E
PL/SQL procere successfully completed.

⑹ oracle怎么创建动态sql(急)

好吧,我辛苦下,我来给你写拼接SQL函数

create table t_a (
c1 varchar2(200),
c2 varchar2(200),
ca varchar2(200),
cb varchar2(200),
cc varchar2(200)
);

create or replace function get_sql_of_tab( c_owner varchar, c_tab_name varchar) return varchar2 as
c_sql varchar2(4000) ;
cursor c1 is
select t.column_name from dba_tab_cols t
where table_name = upper(c_tab_name)
and owner = upper(c_owner)
order by t.column_id;
begin
for r1 in c1 loop
c_sql := c_sql ||' ' || r1.column_name ||',' ;
end loop ;
c_sql := 'SELECT '|| substr(c_sql,1,length(c_sql)-1) || ' FROM '||upper(c_tab_name) ;
return c_sql ;
end get_sql_of_tab ;
/

---------------------以下是PL/SQL命令窗口函数的效果-------------

SQL> select get_sql_of_tab('gxbx','t_a') from al ;

GET_SQL_OF_TAB('GXBX','T_A')
--------------------------------------------------------------------------------
SELECT C1, C2, CA, CB, CC FROM T_A

嘿嘿,动态生产SQL,好吧剩下的你应该明白咋做了。

函数的两个入参 用户名 表名,NND忘记说了

⑺ oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

你这样写就可以了,ORACLE存储过程不需要返回值,只要参数是out就代表为输出参数了,你给它传一个游标进去,执行完,这个游标的值就是你查询的值了。

⑻ oracle,如何通过游标对动态sql的结果集合进行操作

直接写成,不用定义
for temcur in (select col1,col2....,coln from t1 when rownum =1) loop

.........................
.........................
end loop

⑼ ORACLE存储过程中的动态游标

你这种, 表名字是是参数的情况下, 需要使用 动态 sql 来处理了。

你需要先定义一个变量, 来存储你的 sql 语句。

然后 OPEN v_cursor FOR 那个 sql 语句的字符串

下面是一个例子:

SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 动态SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打开游标.
10 OPEN v_cursor FOR v_SQL;
11 -- 循环处理.
12 LOOP
13 -- 填充数据.
14 FETCH v_cursor INTO v_name;
15 -- 无数据时 退出循环.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 输出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 关闭游标.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 发生异常时,如果游标还打开,那么关闭掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E

PL/SQL procere successfully completed.

⑽ oracle存储过程中如何执行动态SQL语句 详细

有时需要在oracle
存储过程中执行动态SQL
语句
,例如表名是动态的,或字段是动态的,
或查询命令是动态的,可用下面的方法:
set
serveroutput
ondeclaren
number;sql_stmt
varchar2(50);
t
varchar2(20);beginexecute
immediate
'alter
session
set
nls_date_format=''YYYYMMDD''';
t
:=
't_'
||
sysdate;
sql_stmt
:=
'select
count(*)
from
'
||
t;
execute
immediate
sql_stmt
into
n;
dbms_output.put_line('The
number
of
rows
of
'
||
t
||
'
is
'
||
n);end;
如果动态SQL
语句
很长很复杂,则可用包装.
CREATE
OR
REPLACE
PACKAGE
test_pkgISTYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);END;/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkgISPROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)ISsqlstr
VARCHAR2(2000);BEGINsqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;END;END;/
在oracle
中批量导入,导出和删除表名以某些字符开头的表
spool
c:\a.sql

热点内容
安卓手机硬件怎么升级 发布:2025-01-22 12:55:25 浏览:220
可编程脉冲电源 发布:2025-01-22 12:49:22 浏览:829
欧规墨规美规中东哪个配置高 发布:2025-01-22 12:48:00 浏览:777
安卓机怎么用不了多久 发布:2025-01-22 12:47:44 浏览:761
安卓怎么录屏别人直播 发布:2025-01-22 12:35:20 浏览:385
1030怎么配置电脑 发布:2025-01-22 12:35:19 浏览:89
sql数据库的端口 发布:2025-01-22 12:20:02 浏览:362
安卓最终幻想8怎么设置中文 发布:2025-01-22 12:19:23 浏览:651
怎么查电脑配置和网络 发布:2025-01-22 12:19:16 浏览:586
linuxsnmp查看 发布:2025-01-22 12:17:49 浏览:37