|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
WindowsAzureSQLDatabase并不支持数据压缩和表分区之类的功能,而且SQLDatabase支持的Transact-SQL语言只是完整版的一部分。另外,因为解决方案提供商不能控制物理资源,所以他们不能将数据文件和索引分配给特定的硬件。
静态SQL的利用
Oracle实践上比SQLServer好一些,但相对没有传说中那末强。这是这些天一识Oracle庐山真脸孔的感觉。看来很多多少事变多云云,听的要比见到的完善。接着第一句说,Oracle的静态SQL就很棒,我专门进修了一下。纪录以下。
先说说静态SQL是甚么,看这句熟习的:
select*froma_tablewherea_variable=a_declarevalue;
再写句静态的:
select*froma_tablewherea_variable=:a_dynamicvalue;
两句的区分很分明,后者多一个占位符,这个以冒号入手下手的变量能够天真地实行分歧前提的where语句。
这是静态SQL语句的上风,接上去的功效就是它的独门工夫了--实行DDL,DCL语句。
静态SQL的实行
1EXECUTEIMMEDIATE语句
EXECUTEIMMEDIATEdynamic_string
[INTO{define_variable[,define_variable]…|record}]
[USING[IN|OUT|INOUT]bind_argument[,[IN|OUTINOUT]bind_argumnet]…]
[{RETURNING|RETURN}INTObing_argument[,bind_argument]…];
上面是它的利用
处置DDL操纵(CREATE,ALTER,DROP)
CREATEORREPLACEPROCEDUREdrop_table(table_nameVARCHAR2)
IS
Sql_statemetVARCHAR2(100);
BEGIN
Sql_statement:=’DROPTABLE’||table_name;
EXECUTEIMMEDIATEsql_statement;
END;
/
创建历程drop_table后,挪用以下:
SQL>execdrop_table(‘worker’)
处置DCL操纵(GRANTREVOKE)
SQL>connsystem/manager
CREATEORREPLACEPROCEDUREgrant_sys_priv(privVARCHAR2,usernameVARCHAR2)
IS
Sql_statVARCHAR2(100);
BEGIN
Sql_stat:=’GRANT“||priv||’TO’||username;
EXECUTEIMMEDIATEsql_stat;
END;
/
挪用
SQL>execgrant_sys_priv(‘CREATESESSION’,’SCOTT’)
处置DML操纵(INSERTUPDATEDELETE)
假如DML语句带有占位符,那末在EI语句中则要带USING子句
假如DML语句带有RETURNING子句,那末EI语句中要带有RETURNINGINTO子句
例子,处置单行查询:
DECLARE
sql_statVARCHAR2(100);
emp_recordtbl%ROWTYPE;
BEGIN
sql-stat:=SELECT*FROMtblWHEREtblno=:no;
EXECUTEIMMEDIATEsql_statINTOemp_recordUSING&1;
dbms_output.put_line(emp_record.ename||emp_record.sal);
END;
/
2利用OPEN-FOR,FETCH和CLOSE语句处置多行查询
静态处置SELECT语句步骤:界说游标->翻开游标->轮回提取数据->封闭游标
界说:
TYPEcursortypeISREFCURSOR;
cursor_variablecursortype;
翻开:
OPENcursor_variableFORdynamic_string
[USINGbind_argument[,bing_argument]...];
提取:
FETCHcursor_variableINTO{var1[,var2]...|recor_var};
封闭:
CLOSEcursor_variable;
显现特定部门雇员姓名和人为
DECLARE
TYPEempcurtypeISREFCURSOR;
emp_csempcurtype;
emp_recordemptable%ROWTYPE;
sql_statVARCHAR2(100);
BEGIN
sql_stat:=select*fromemptablewheredeptno=:dno;
OPENemp_csFORsql_statUSING&dno;
LOOP
FETCHemp_csINTOemp_record;
EXITWHENemp_cs%NOTFOUND;
dbms_output.put_line(emp_record.ename||emp_record.sal);
ENDLOOP;
CLOSEemp_cs;
END;
/
3利用批量静态SQL(9i)
BULK子句能够加速批量数据的处置速率。有三种语句撑持BULK子句的办法。
1利用EXECUTEIMMEDIATE,语法为:
EXECUTEIMMEDIATEdynamic_string
[BULKCOLLECTINTOdefine_variable[,define_variable…]]
[USING[IN|OUT|INOUT]bind_argument[,[IN|OUTINOUT]bind_argumnet]…]
[{RETURNING|RETURN}
BULKCOLLECTINTOreturn_variable[,return_variable…]];
用于DML处置多行子句,例子:为某部门一切员工增添%比的人为
DECLARE……
BEGIN
sql_stat:=UPDATEemptblSETsal=sal*(1+:percent/100)||
WHEREdeptno=:dno||
RETURNINGename,salINTO:name,:salary;
EXECUTEIMMEDIATEsql_statUSING&percent,&dno
RETURNINGBULKCOLLECTINTOename_table,sal_table;
FORiIN1.ename_table.COUNTLOOP
dbms_output.put_line(ename_table(i)||sal_table(i));
ENDLOOP;
END;
/
2FETCH语句,语法为
FETCHdynamic_cursor
BULKCOLLECTINTOdefine_variable[,dyfine_variable...];
3FORALL语句。合用于DML,不合用于静态的SELECT语句。FORALL语句要与EI分离利用。语法为
FORALLindexINlowerbound..upperbound
EXECUTEIMMEDIATEdynamic_string
USINGbind_argument|bind_argumnet(index)
[,bind_argument|bind_argumnet(index)]…
[{RETURNING|RETURN}BULKCOLLECT
INTObind_argument[,bind_argument…]];
由于MySQL数据库已经如此普及,对企业来说它无疑是一个更好的选择。 |
|