定义语言DDL:create drop truncate
操作语言DML:修改类:insert delete update
查询类: 查询单行,查询多行
在PL/SQL中执行SQL语句需要注意 DDL不能直接执行,DML中的增删改可以执行.
赋值的方式有两种:①XXX := OOO; ②用select XXX into OOO
游标:对象或查询数据所在的内存地址,保存了增删改语句执行后的状态
游标分为隐式游标和显式游标:
隐式游标对象为SQL,我们常用的是SQL%ROWCOUNT得到执行SQL语句所影响的行数;SQL%FOUND表示数据是否存在;
显式游标分为游标FOR循环和CURSOR对象:
①游标FOR循环:语法为 FOR 游标对象名 in 查询语句 LOOP .....END LOOP
在需要对查询中每条记录进行逐条处理时用游标FOR循环,在很多资料上有不少人也将FOR循环归纳为隐式对象的范畴
②CURSOR:必须用户自己定义,自己打开,自己循环,自己关闭,简称为dofw
使用游标需要以下步骤:
定义游标: CURSOR 游标对象名 is 查询语句;
定义行标量: 行变量名 游标对象名%ROWTYPE;
打开游标: OPEN 游标对象名;
循环前必须要先执行FECTH语句,该语句执行机制是先取得当前行数据,然后指针下移一位,基本语法为: fetch 游标对象名 into 行变量名;
循环语句:while(游标对象名%FOUND) LOOP .... END LOOP;
关闭游标:CLOSE 游标对象名;
PL/SQL中执行字符串:
execute immdiate(String) String表示需要执行的SQL字符串.
如果查询时返回多条记录,则需要使用: OPEN 游标变量名 FOR 查询语句
用: TYPE 游标变量名 IS REF CURSOR定义游标变量类型
之后操作与dofw操作一样;
扩展:
导数据:
如果用Oracle导入导出数据
导出:exp scott/tiger@连接名 file=c:\1.dmp
导入:imp scott/tiger@连接名 file=c:\1.dmp
如果用PL/SQL DEV导入导出数据
导出insert语句,create 这叫 sql脚本!
游标CURSOR对象使用代码展示:
①:
DECLARE
CURSOR my_cur IS SELECT * FROM emp;
my_row my_cur%ROWTYPE;
BEGIN
OPEN my_cur;
FETCH my_cur INTO my_row;
WHILE(my_cur%FOUND)
LOOP
dbms_output.put_line(my_row.ename);
FETCH my_cur INTO my_row;
END LOOP;
CLOSE my_cur;
END;
②:
DECLARE
mysql VARCHAR2(4000);
TYPE my_cur_type IS REF CURSOR;
my_cur my_cur_type;
my_row emp%ROWTYPE;
a VARCHAR2(100);
BEGIN
mysql := 'select * from emp';
OPEN my_cur FOR mysql;
FETCH my_cur INTO my_row;
WHILE(my_cur%FOUND)
LOOP
dbms_output.put_line(my_row.ename);
FETCH my_cur INTO my_row;
END LOOP;
CLOSE my_cur;
END;