变量的声明
1.常用类型变量:
binary_integer :整数,主要用来计数而不是用来表示字段类型,(提高效率)

number;数字类型

char:定长字符串;

date:日期;

long:长字符串,最长2G;

boolean 布尔类型,可以取值true,false,null值;


2.使用%type属性

3.复合变量的声明:
Table变量类型(相当于java的数组) 例子:type type_table_emp_empno is table of emp.empno%type index by binary_integer;
Record变量类型:(相当于java的类) 例子:type type_record_dept is record(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);

v_temp type_record_dept;

4.constant 数据类型标识符 声明不可变的变量 类似于编程语言中的final

5.数组的声明
(1)游标用

type row_type is record(
		prog_num varchar2x,
		information varchar2x,
		container_num varchar2x
	  );
  dataTemp row_type;



循环游标

fetch data1 into dataTemp;
    loop
      DBMS_OUTPUT.PUT_LINE('オーダ情報 = '|| dataTemp.information);
      DBMS_OUTPUT.PUT_LINE('箱数 = '|| dataTemp.container_num);
      fetch data1 into dataTemp;
      exit when data1%notfound;
    end loop;


(2)可用t_com_data.first||t_com_data.end方法

TYPE type_t_com_temp is record(
		  amount        T_COM_購入依頼.受注製番%type,
		  invoice_no    T_COM_購入依頼.出荷伝票NO%type,
		  drow_no       T_COM_購入依頼.手配図番%type,
		  delivery_term T_COM_購入依頼.製造指示納期%type
	  );
	  TYPE t_com_temp IS TABLE OF type_t_com_temp;
	  t_com_data t_com_temp;




6.rpad函数从右边对字符串使用指定的字符进行填充
语法格式如下rpad(string,padded_length,[pad_string])
例如:

rpad('tech', 7); 将返回'tech '
	rpad('tech', 2); 将返回'te'
	rpad('tech', 8, '0'); 将返回'tech0000'
	rpad('tech on the net', 15, 'z'); 将返回 'tech on the net'
	rpad('tech on the net', 16, 'z'); 将返回 'tech on the netz'

7.NVL函数的格式如下:NVL(expr1,expr2)

含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。

8.1)substr函数格式 (俗称:字符截取函数)

  格式1: substr(string string, int a, int b);

  格式2:substr(string string, int a) ;

9.lpad 语法格式如下: SQL> select lpad('abcde',10,'x') from dual;
LPAD('ABCDE',10,'X')
--------------------
xxxxxabcde
lpad( string, padded_length, [ pad_string ] )
string
准备被填充的字符串;
padded_length
填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
pad_string
填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。

10.1)instr()函数的格式 (俗称:字符查找函数)

格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串)

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目标字符串, 起始位置, 匹配序号)

解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

注:在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束。

11.ROW_NUMBER() OVER
例子:select (row_number() over(order by 項番) + (select max(項番) from W_出荷引当_店頭))as seq from W_出荷引当_店頭;

12.FETCH…BULK COLLECT INTO语句,每次可以提取多行数据。语法如下:
(1) FETCH cursor_name INTO variable1,variable2,…;
此方法必须要使用循环语句处理结果集的所有数据。
(2) FETCH cursor_name BULK COLLECT INTO collect1,collect2,…[LIMIT rows]
[LIMIT rows]可用来限制每次游标每次提取的行数。

13.oracle 游标有4个属性: %ISOPEN , %FOUND , %NOTFOUND, %ROWCOUNT
%ISOPEN 判断游标是否被打开,如果打开%ISOPEN 等于true,否则等于false
%FOUND %NOTFOUND 判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false
%ROWCOUNT 返回当前位置为止游标读取的记录行数。

14.游标的使用:
声明:cursor c_tmp is select * from spmp
获取游标内的数值: for wk_emp in c_tmp loop
wk_count := wk_count + 1;
wk_zuban(wk_count).作業図番 := wk_emp.作業図番;
end loop;

15.Where Current Of 游标名 语句允许你更新或者是删除最后由cursor取得的记录。
通过从游标工作区中抽取出来的数据,可以对数据库中的数据进行操纵,包括修改与删除操作。
要想通过游标操纵数据库,在定义游标的时候,必须加上FOR UPDATE OF子句;
而且在UPDATE或DELETE时,必须加上WHERE CURRENT OF子句,则游标所在行被更新或者删除。
一个FOR UPDATE子句将使所在行获得一个行级排他锁。
UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。
要使用这个方法,在声明游标时必须使用FOR UPDATE子串,当对话使用FOR UPDATE子串打开一个游标时,
所有返回集中的数据行都将处于行级(ROW-LEVEL)独占式锁定,其他对象只能查询这些数据行,不能进行UPDATE、DELETE或SELECT...FOR UPDATE操作。

16. 循环数组
FOR i IN 1 .. 40
LOOP
dbms_output.put_line('test:' || wk_opname(i));
END LOOP;

17.数组
----------------------------固定长度数组
type intarray is varray(30) of varchar2(100);
var_arr intarray := intarray('a','b','c','d');
---------------------------未知长度数组
type vararray is table of varchar2(50) index by binary_integer;
var_arr vararray;

format_filenames out dbms_sql.varchar2_table 数组类型(项目上写法)

18. bulk collect into t_com_data
into数组必须用bulk collect

19.输出数组
for i in 1..var_arr.count
loop
dbms_output.put_line(var_arr(i));
end loop;

20.drow_nos dbms_sql.varchar2_table; --図番
查询多条数据,但只有一个参数可以用这个数组

21. to_number()
to_char()

22.SQLERRM是一则函数。oracle sqlerrm函数 sqlerrm函数返回指定错误代码的错误信息。

23.java调用存储过程

public static void main(String[] args) throws SQLException, ClassNotFoundException {
	   Class.forName("oracle.jdbc.driver.OracleDriver");
	   String url = "jdbc:oracle:thin:@10.85.35.163:1521:orcl11sjis";
	   String user = "FIT_VLCS";
	   String password = "FIT_VLCS";
	   Connection conn = DriverManager.getConnection(url, user, password);
	   //调用存储过程
	   CallableStatement c=conn.prepareCall("{call 進度管理票.test(?)}");
	   //给输入参数赋值
	   c.registerOutParameter(1,java.sql.Types.VARCHAR);
	   //执行存储过程
	   c.execute();
	   System.out.println (c.getString(1));
	   conn.close();
	}



24.dbms_sql.varchar2_table 字符串类型的数组

25.type tb_sv is table of op_rd_sv index by binary_integer;
1. DECLARE 说明以下你要声明的部分
2. Type 声明是类型 table_t 类型的名字
3. IS TABLE OF 指定是一个集合的表的数组类型, 简单的来说就是一个可以存储一列多行的数据类型 , my_emp 指出在哪个表上( 存在的表 ) %ROWTYPE 指在表上的行的数据类型.
4. INDEX BY BINARY_INTEGER 指索引组织类型
5. var_temp 定义一个变量来存储集合数据类型

26.IN OUT 通俗来说就表示既可以向过程体外传递参数也可以从过程体内传出数值 。

27.ORACLE中的支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE :与LIKE的功能相似
2,REGEXP_INSTR :与INSTR的功能相似
3,REGEXP_SUBSTR :与SUBSTR的功能相似
4,REGEXP_REPLACE :与REPLACE的功能相似
例:
select * from fzq where regexp_like(value,'1[0-9]{4}60');

28.plsql可以嵌套 可用于声明多个exception
例子:procedure aaa(x varchar)is
begin
begin
null;
end;
xxxx;(其它内容)
end;