易截截图软件、单文件、免安装、纯绿色、仅160KB

动态SQL与静态SQL

    所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。
Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明:
  一、本地动态SQL
  本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。
  1、本地动态SQL执行DDL语句:
  需求:根据用户输入的表名及字段名等参数动态建表。
create or replace procedure proc_test
(
table_name in varchar2, --表名
field1 in varchar2, --字段名
datatype1 in varchar2, --字段类型
field2 in varchar2, --字段名
datatype2 in varchar2 --字段类型
) as
str_sql varchar2(500);
begin
str_sql:=’create table ’||table_name||’(’||field1||’ ’||datatype1||’,’||field2||’ ’||datatype2||’)’;
execute immediate str_sql; --动态执行DDL语句
exception
when others then
null;
end ;
  以上是编译通过的存储过程代码。下面执行存储过程动态建表。
SQL> execute proc_test(’dinya_test’,’id’,’number(8) not null’,’name’,’varchar2(100)’); http://www.mscto.com
PL/SQL procedure successfully completed
SQL> desc dinya_test;
Name Type Nullable Default Comments
---- ------------- -------- ------- --------
ID NUMBER(8)
NAME VARCHAR2(100) Y
SQL>
  到这里,就实现了我们的需求,使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。
  2、本地动态SQL执行DML语句。
  需求:将用户输入的值插入到上例中建好的dinya_test表中。
create or replace procedure proc_insert
(
id in number, --输入序号
name in varchar2 --输入姓名
) as
str_sql varchar2(500);
begin
str_sql:=’insert into dinya_test values(:1,:2)’;
execute immediate str_sql using id,name; --动态执行插入操作
exception
when others then
null;
end ;
  执行存


相关文档:

SQl自动备份删除

BackupEveryDay
每天进行数据库的差异备份
day
Declare @File Varchar(2000)
Set @File='E:\Databasebackup\njyc_data_diff.BAK'
Backup database njyc_data to Disk=@File with DIFFERENTIAL
WeekBackup
每周进行一次数据库的完全备份,备份文件名为当天日期 (njyc_data_年_月_日)
BackupAll
DECLARE @BackupFi ......

SQL自动删除备份文件

DECLARE  @sql varchar(8000)  
--下面是删除15天前备份文件的处理  
set @sql='Del E:\Databasebackup\'  
@sql=@sql +rtrim(convert(varchar,getdate()-15,112))+'.bak'
Exec  master..xp_cmdshell   @sql  
DECLARE @DelFile Varchar(256)
set ......

使用公用表表达式(CTE)简化嵌套SQL 和进行递归调用

1.使用CTE简化嵌套sql
   先看下面一个嵌套的查询语句:
select * from person.StateProvince where CountryRegionCode in 
         (select CountryRegionCode from person.CountryRegion where  ......

case when then...else end sql 语句用法

select f.AGENTID as 'ID',
          f.AGENTNAME as '姓名',
          f.COMNAME as '公司简称',
          c.REGISTDATE as '注册时间',
     ......

使用 SQL Server 时需要经常用到的几个设置选项


1. SET DEADLOCK_PRIORITY
说明:控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。
语法:SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }
参数:LOW  指定当前会话为首选死锁牺牲品。Microsoft® S ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号