码迷,mamicode.com
首页 > 数据库 > 详细

oracle——基础知识(二)

时间:2014-10-18 20:52:42      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:style   ar   使用   for   sp   数据   on   问题   ad   

1、select 查询

单独的一条 select 语句  

在PL/SQL中通过SELECT从数据库中检索数据:

语法:

<1> 必须使用INTO子句

<2> 查询必须并且只能返回一行

<3> 可以使用完整的SELECT 语法

使用SELECT 命令,可以从数据库中取出单行数据  
使用DML命令,修改数据库中的行    
使用COMMIT 或ROLLBACK 命令控制事务    
通过EXECUTE IMMEDIATE,执行DDL    

 

 

 

 

 

 

 

 

1、查看字段类型

select * From all_tab_columns where table_name=upper(‘表名‘);

2、is与as

在 存储过程 和 函数 中没有区别;在 视图 中只能用 AS 不能用 IS ;在 游标 中只能用 IS 不能用 AS 。 从其定义也可以看出没什么区别。

create [or replace] procedure procedure_name
 [(parameter_name [in | out | in out] type [,........])]
  {is | as}
begin
   procedure_body
end procedure_name;

 

3、EXECUTE IMMEDIATE。解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块。

使用技巧:
1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交
如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE
IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据
2. 不支持返回多行的查询。
3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号;
4.举例:execute immediate ‘select count(1) from tempA‘。



问题:如何让过程返回数据集?

回答:

关键有两点:一是使用out类型的参数。二是该参数使用特殊数据类型:系统引用游标类型(sys_refCursor)。

过程返回数据集,可以在PL/SQL程序中由另一个块或过程接收;

问题:cursor类型与sys_refCursor类型有什么区别?

回答:

Cursor是游标类型,代表是数据集本身,只能在PL/SQL程序中关闭;可以通过游标FOR循环或者定义cursor来完成。

而sys_refCursor代表的是游标的引用,即数据集的引用地址,只能通过open for语句来完成。

两者的最大区别是后者可以将这个地址传递给其它程序。

问题:据说“ref cursor类型”也能够返回数据集,与sys_refCursor有什么关系?

回答: ref cursor是Oracle旧版本中使用的数据类型,用这种对象的缺点在于必须在包中定义;而现在用ys_refCursor类型,可以直接使用。



  • 存储过程

子程序可以独立编译并存储在Oracle数据库。使用CREATE语句显式创建的子程序就是一个"存储"子程序。一旦编译并保存到数据词典中,它就成了一个模式对象(schema object),可以被许多连到数据库的应用程序调用。

定义在包内的存储子程序称为打包子程序(packaged subprogram);单独定义的存储子程序称为独立子程序(standalone subprogram);而在另外一个子程序或PL/SQL块内定义的存储子程序称为本地子程序,这样的子程序不能被其他应用程序调用,只供本地使用。

 

oracle——基础知识(二)

标签:style   ar   使用   for   sp   数据   on   问题   ad   

原文地址:http://www.cnblogs.com/SunBlog/p/4033572.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!