当前位置:首页 » 编程语言 » sql存储过程动态语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql存储过程动态语句

发布时间: 2022-06-22 09:22:07

A. oracle存储过程中如何执行动态sql语句

有时需要在oracle
存储过程
中执行动态SQL
语句
,例如表名是动态的,或字段是动态的,或查询命令是动态的,可用下面的方法:
set
serveroutput
on
declare
n
number;
sql_stmt
varchar2(50);
t
varchar2(20);
begin
execute
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_pkg
IS
TYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);
END;
/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkg
IS
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)
IS
sqlstr
VARCHAR2(2000);
BEGIN
sqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;
END;
END;
/
在oracle
中批量导入,导出和删除表名以某些字符开头的表
spool
c:\a.sql
select
'drop
table
'
||
tname
||
';'
from
tab
where
tname
like
'T%';
spool
off
@c:\a

B. 如何在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

C. 动态SQL语句与存储过程,谁有高见谢谢

如果你不写存储过程你有没想过会效率根低呢!
说白了你就是不明白存储过程!
在一个名称下存储并作为一个单元进行编译和处理的T-SQL 语句的集合。

在一个存储过程内,可以设计、编码、测试和执行某个常用任务所需的 SQL 语句和逻辑。之后,每个需要执行该任务的应用程序只须执行此存储过程即可。
允许模块化程序设计
对于需要重复执行的代码,执行效率更高
减少网络流量
可作为安全机制使用
好了如果你不用!那好我问你SQL注入你要怎么防止!
而且插入数据如果出现问题!数据会保存么!
这样你就会有那样这样的BAG出现!
存储过程为什么叫存储过程呢!
就是因为它预先把T-SQL语句存起来!在执行的时候系统会省掉很多缓存资源!
而且不会浪费资源!
假如有几百条的存储过程要写!又要计算!
那么为什么不可以在客户端实现一些这样又可以减轻SQL的负担!
现在的电脑配置能很高啦!问题一般出现不大!
界面验证呀!像一些简单的查询大可以在客户端实现么!
敏感数据在用存储过程计算!
我就做你说的那种第二种的开发!
效果也挺不错!
问题不在于存储过程!在于你代码的如何编写!
怎么样能够大大提高运行的效率!
例如不必要浪费的常量!开辟会占堆中资源!
有的代码运行次数太少!可以简写!甚至不写!非必要都可以省略!
4层架构知道吧!尽量的做到代码要重用!可大大减少资源的浪费!
SQL的负担也会腾出来许多!
扯远啦!
好了就这吧!
希望对你有帮助!

D. sql 存储过程语句编写

要到达你的要求,在存储过程中必须使用动态SQL语句。


一个简化的例子:

createprocereMyDynamicSQL
@tblwherenvarchar(200)--a==aora==xxx
as
begin
declare@sqlnvarchar(max)
--动态拼接sql语句
set@sql=N'select*from[表一]where'+@tblwhere
--执行
executesp_executesql@sql
end

E. Sql存储过程 如何动态修改sql语句!

利用动态sql:
将整个sql语句编辑成一个字符串,最终通过execute语句来执行动态sql

Select @Count = count(ID)
FROM NetDIY_Procts_CN
那么这个呢?需要把结果返回到@Count中,要怎么在这个sql加上@SqlWhere 条件语句

exec('select ' + @Count + '= count(ID) from NetDIY_Procts_CN ' + @SqlWhere)

SELECT * FROM NetDIY_Procts_CN Where weighting <= @Name order By weighting desc
exec('select * FROM NetDIY_Procts_CN Where weighting <= '+@Name+' ' + @SqlWhere+' order By weighting desc')
两种都出错

F. MySQL存储过程中实现执行动态SQL语句的方法

本文实例讲述了MySQL存储过程中实现执行动态SQL语句的方法。分享给大家供大家参考。具体实现方法如下:
mysql>
mysql>
delimiter
$$
mysql>
mysql>
CREATE
PROCEDURE
set_col_value
->
(in_table
VARCHAR(128),
->
in_column
VARCHAR(128),
->
in_new_value
VARCHAR(1000),
->
in_where
VARCHAR(4000))
->
->
BEGIN
->
DECLARE
l_sql
VARCHAR(4000);
->
SET
l_sql=CONCAT_ws('
',
->
'UPDATE',in_table,
->
'SET',in_column,'=',in_new_value,
->
'
WHERE',in_where);
->
SET
@sql=l_sql;
->
PREPARE
s1
FROM
@sql;
->
EXECUTE
s1;
->
DEALLOCATE
PREPARE
s1;
->
END$$
Query
OK,
0
rows
affected
(0.00
sec)
希望本文所述对大家的MySQL数据库程序设计有所帮助。

G. 存储过程含有动态SQL,与静态SQL有什么差别

SQL 语句从编译和运行的角度可以分为两种,静态 SQL和 动态 SQL,这两种 SQL 在使用方式、运行机制和性能表现等方面各有特点 :

静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。

动态 SQL:动态 SQL 语句是在应用程序运行时被编译和执行的,例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。

静态sql:语句类型在编程时候必须是确定好的。比如
select * from employee where empno='abc'select * from employee where empno='12'都必须是确定的,唯一可以变化的是abc的值。
动态sql:语句类型可以在运行期间指定,比如clp就是最典型的动态sql程序,你可以输入任何命令。
静态sql的存取路径是在运行前就确定好的,而动态sql的存取路径是在运行时动态生成的。因此生成的存取计划相对更优,但考虑到生成存取路径的开销,有可能应用程序的运行时间相对会比静态sql长些。

H. 写MS-SQL存储过程动态语句的时候

写MS-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;

I. 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

J. 怎样SQL存储过程中执行动态SQL语句

1.EXEC的使用
EXEC命令有两种用法,一种是执行一个
存储过程
,另一种是执行一个动态的
批处理
。以下所讲的都是第二种用法。
下面先使用EXEC演示一个例子,代码1
DECLARE
@TableName
VARCHAR(50),@Sql
NVARCHAR
(MAX),@OrderID
INT;
SET
@TableName
=
'Orders';
SET
@OrderID
=
10251;
SET
@sql
=
'SELECT
*
FROM
'+QUOTENAME(@TableName)
+'WHERE
OrderID
=
'+
CAST(@OrderID
AS
VARCHAR(10))+'
ORDER
BY
ORDERID
DESC'
EXEC(@sql);
sp_executesql命令在SQL
Server中引入的比EXEC命令晚一些,它主要为重用执行计划提供更好的支持。
为了和EXEC作一个鲜明的对比,我们看看如果用代码1的代码,把EXEC换成sp_executesql,看看是否得到我们所期望的结果
DECLARE
@TableName
VARCHAR(50),@sql
NVARCHAR(MAX),@OrderID
INT
,@sql2
NVARCHAR(MAX);
SET
@TableName
=
'Orders
';
SET
@OrderID
=
10251;
SET
@sql
=
'SELECT
*
FROM
'+QUOTENAME(@TableName)
+
'
WHERE
OrderID
=
'+CAST(@OrderID
AS
VARCHAR(50))
+
'
ORDER
BY
ORDERID
DESC'
EXEC
sp_executesql
@sql