当前位置:首页 » 编程语言 » oraclesql动态

oraclesql动态

发布时间: 2025-03-04 12:44:19

㈠ Oracle中“execute immediate”是什么意思

EXECUTE IMMEDIATE 一般用于 执行动态 sql

例如:
SQL> BEGIN
2 EXECUTE IMMEDIATE ( 'SELECT * FROM test_dysql WHERE id=1' );
3 END;
4 /
PL/SQL procere successfully completed.

execute immediate 是用于在 存储过程里面. 动态的执行 SQL 语句。

例如:
有个存储过程, 用于检索表的行数。 传入的参数是 表的名称。
这种情况下,你
SELECT count(*) FROM v_变量
是无法执行的。

你只能定义一个变量 vsql varchar2(100);
然后
vsql = 'SELECT count(*) FROM ' || v_变量
然后调用 EXECUTE IMMEDIATE 来执行。

动态SQL,意思就是你需要执行的 SQL 语句, 不是固定的。要等运行的时候, 才能确定下来。
也就像上面那个例子,表名是 外部传入的。

不过 动态SQL 与 EXECUTE IMMEDIATE 主要用在 存储过程里面。

假如你是用 C# 或者 Java 之类的开发语言。 访问数据库的话。
是用不到 EXECUTE IMMEDIATE 的。

㈡ 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

㈣ 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忘记说了

热点内容
仓单加密 发布:2025-03-04 15:54:45 浏览:898
java架构师面试 发布:2025-03-04 15:54:05 浏览:966
安卓手机如何取饿了么会员 发布:2025-03-04 15:53:28 浏览:184
c语言int和double 发布:2025-03-04 15:38:04 浏览:443
手游编程入门 发布:2025-03-04 15:30:55 浏览:899
android进程被杀 发布:2025-03-04 15:30:52 浏览:394
火车的无线密码都是什么 发布:2025-03-04 15:08:42 浏览:455
存单锁住后如何重置密码 发布:2025-03-04 15:08:17 浏览:569
sqlintchar 发布:2025-03-04 14:55:21 浏览:483
切水泥解压 发布:2025-03-04 14:41:55 浏览:501