欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PL/SQL学习笔记(四)

程序员文章站 2024-01-01 23:55:46
...

这部分主要讲述在PL/SQL中如何访问oracle

(一)检索单行数据

在PL/SQL嵌入select语句,使用方法:

SELECT select_list INTO variable_name1,variable_name2,variable_name3... FROM TABLE WHRE condition

例:

 

PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C DECLARE
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   v_sal 
NUMBER ( 6 , 2 );
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   v_id 
NUMBER ;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
BEGIN
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   v_id:
= ' &id ' ;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   
SELECT  salary  into  v_sal  FROM  employee
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   
WHERE  id = v_id;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C .
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 

 

需要注意事项:

1.不仅可以使用普通标量接受数据,也可以使用Record接受数据

2.使用的SELECT语句必须返回一条记录,并且只能返回一条记录,否则会触发PL/SQL异常,或者显示错误信息

(1)NO_DATA_FOUND异常,当没有数据返回时抛出此异常

(2)TOO_MANY_ROWS异常,返回多条数据时抛出此异常

(3)在WHERE子句中使用变量时必须注意,变量名不能字段名相同,否则会触发TOO_MANY_ROWS异常

(二)使用DML语句

1.在PL/SQL中使用DML语句(insert,update,delete)语句与直接在sqlplus使用没什么不同,只不过可以使用变量代替具体的值,不再举例

2.SQL游标:

(1)在执行SELECT,INSERT,UPDATE,DELETE语句时,Oracle Server会为这些SQL语句分配相应的Context Area,并且Oracle使用此Context Area解析并执行相应的SQL语句,而游标就是指向Context Area的指针。在oracle中,游标又分为显式和隐式两种,其中隐式游标又被成为SQL游标,专门用于处理SELECT INTO,INSERT,DELETE,UPDATE语句。而显式游标多用于处理多行的SELECT语句。

(2)SQL游标的四种属性:

(A) SQL%ISOPEN

用于确定SQL游标是否打开。因为oracle在执行SELECT INTO,INSERT,UPDATE,DELETE语句时会隐含着打开游标,并在执行结束后关闭。所以此值对于开发人员来说一直是false,实际开发中不需要此属性

(B) SQL%FOUND

用于确定SQL语句是否执行成功,当SQL语句有作用行时,它为TRUE,否则为FALSE,如:

PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C DECLARE
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   v_dept emp.deptno
% TYPE;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
BEGIN
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   
UPDATE  emp  SET  sal = sal * 1.1   WHERE  deptno =& no;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C   
if  SQL % FOUND  then
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C       dbms_output.put_line(
' 语句执行成功 ' );
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C    
else
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C       dbms_output.put_line(
' 语句执行失败 ' );
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C    
end   if ;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
END ;
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 
PL/SQL学习笔记(四) 
            
    
    博客分类: 数据库技术 SQLSQL ServerOracle嵌入式C 


(C)与SQL%FOUND相反的就是SQL%NOTFOUND

(D)SQL%ROWCOUNT ,用于返回SQL语句作用的行数

(三)事务控制语句

在PL/SQL中同样可以使用COMMIT,ROLLBACK,SAVEPOINT等事务控制语句,与直接使用没有什么不同。

上一篇:

下一篇: