SQL plus是与Oracle进行交互的客户端工具
基本命令:
host:从SQL plus环境切换到系统环境,一边执行操作系统命令
disconnect/connect:disconnect断开与Oracle的连接,connect name/password 取得与数据库的连接
save filename 把当前缓冲区中的内容存放到存入文件当中
get filename 把文件中的内容放入缓冲区中
edit:对当前的输入内容进行编辑
/ run 和r重新运行上一次运行的SQL语句
desc/describe :可以查看对象的结构
col:主要格式化列的显示形式
clear screen:清屏
2.PL/SQL:
变量:
variable_name [constant] datatype [:=default expression]
赋值:
X:=200; Y=Y+(X*20);
或者通过select into或fetch into 来赋值
select sum(salary) into totalSalary from emplory where dept=10;
数据类型:
数据类型 binary_integer:整数 主要用来计数而不是用来表示字段类型 number 数字 varchar2 可变字符 char 定长字符 date 日期 v_date date := to_date(sysdate,'yyyy-mm-dd hh24:mi:ss') long 长字符串 最长2g boolean true/false/null 可以为null 所以 一定要给个初始值 不然就为空值,而不是false 赋值-格式 := v_number number(10):=0; v_varchar2 varchar2 :='douban'; 基本数据类型: number,character,date/time,Boolean 数字数据类型:binary_integer number 字符数据类型:char,long,raw,longraw,varchar2 日期和布尔类型:Boolean/date LOB数据类型:BFILE/BLOB/CLOB/NCLOB
块结构:
declare v_empname varchar(50); v_sal number(10,2); begin select ename,sal into v_empname,v_sal from emp where empno=7369; dbms_output.put_line(v_empname||'---'||v_sal); exception when others then dbms_output.put_line('error'); end;
函数和存储过程:
-存储过程 create sequence emp_empno_sq start with 8000; create or replace procedure addemp(ename varchar2,job varchar2,sal number) is begin insert into emp values (emp_empno_sq.nextval,ename,job,sal,'23-1月 -82',10000,100,10); end; 显示错误:show error 调用过程:两种方式 1-exec addemp 过程名(参数) 1-call addemp 过程名(参数) 调用存贮过程 exec addemp('java','javaee',1000); java 调用存储过程 实例 **************************************************************** class.forname("oracle.jdbc.oracledriver").newinstance(); string url = "jdbc:oracle:thin:@192.168.6.19:1531:orcl"; string user = "atf_ygj"; string password = "mas123"; conn = drivermanager.getconnection(url, user, password); conn.setautocommit(false); cstmt = conn.preparecall("{ call prc_1(?,?) }"); cstmt.setstring(1, "100"); cstmt.setstring(2, "testone"); cstmt.execute(); conn.commit(); ********************************************** --函数 返回值类型+is+返回变量名+类型 create or replace function getsalary(empname varchar2) return number is empsal%emp; begin select sal into empsal from emp where ename=empname; return empsal; end; var s number; call getsalary('scott') into:s; 函数的调用及限制 1.函数的调用(其具体调用方法参照上面的演示) a.使用全局变量接收函数的返回值 b.使用本地变量接受函数的返回值 c.在sql语句中直接调用函数 d.使用dbms_output调用函数 注:函数在调用的时候需要按位置指定参数,没有存储过程参数传递灵活 必须具有execute 函数的权限 var s number; exec:s:=getsalary('scott') select getsalary('scott') from dual 复杂的数据类型: 1.record: TYPE <记录类型名> IS RECORD( <数据项1> <数据类型> 【NOT NULL【:=<表达式>】】; <数据项2> <数据类型> 【NOT NULL【:=<表达式>】】;) <记录变量名> <记录类型名> 例: declare type emp_record_type is record 定义一个记录类型,名称为 emp_record_type (v_ename emp.ename%type, 格式“字段名 表名.表中的字段名%type” v_job emp.job%type, v_sal emp.sal%type); emp_rec emp_record_type; 记录变量名:emp_rec(别名) emp_record_type记录类型 begin select ename,job,sal into emp_rec 格式“select 字段 into 记录变量名 from 表名 where…” from emp where empno=&eno; dbms_output.put_line(emp_rec.v_ename||':' emp_rec.v_job||';'||emp_rec.v_sal); end; / 2.table TYPE <表类型名> IS TABLE OF <数据类型> INDEX BY BINARY_INTEGER <表变量名> <表类型名> 说明: 表类型名:用户定义的 数据类型:表中元素的数据类型 例子: declare TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; Ename_table ename_table_type; begin select ename INTO ename_table(1) from emp 注意了:这里别忘了有个1哦。。。。指定元素的数目 where empno=7902; dbms_output.put_line('员工名:'||ename_table(1)); end; / 3.数组类型 与表类型的区别就是声明了一个数组就确定了数组中的元素的数目 特点:元素的次序是固定而且连续的,并且索引变量从1开始一直到其定义的最大值为止 语法: TYPE <数组类型名> IS VARRAY(<MAX_SIZE>) OF <数据类型>; <表变量名> <表类型名> 说明: 数组类型名:用户定义的 数据类型:数组中元素的数据类型 MAX_SIZE:指明数组元素个数的最大值
过程的基本结构: 控制结构:if condition then eg: if (a>b)and(c>d) then statement ; else if statement; else statement; 循环控制:loop....end loop(二者之间可以无限循环,因此必须有条件时期exit) while condition loop statement; endloop; for condition loop statement; endloop;
参考文章:
http://my.oschina.net/abian/blog/131822
http://blog.sina.com.cn/s/blog_64c236b10100nwzy.html