posts - 61,  comments - 2033,  trackbacks - 0

oracle 10g -凯发k8网页登录

1.1     结构

declare -- 定义

begin  -- 执行部分

exception  -- 例外处理

end;  -- 结束

 

set serveroutput on;
declare v_ename varchar2(
5 );
begin
select ename into v_ename from emp where empno=&no;
dbms_output.put_line(
'¹íô±ãû:' || v_ename);
exception
when no_data_found then
dbms_output.put_line(
'please input correct employees no!' );
end;
/

 

1.2     块分类

<> <>

1.3     子程序

1.1.1       过程

执行特定的操作

  create or replace procedure update_sal(namevarchar2,newsal number)
is
begin
     update emp set sal=newsal where lower(ename)=lower(name);
end;
/

调用:

exec update_sal( 'smith' , 10 )
call update_sal(
'smith' , 800 )

1.1.2       函数

返回特定数据

create or replace function annual_income(namevarchar2)
returnnumberis
       annual_salary number(
7 , 2 );
begin
select sal*
12 nvl(comm, 0 )  into annual_salary from emp where lower(ename)=lower(name);
return annual_salary;
end;
/

调用 :

sql> var income number

sql> call annual_income('scott') into : income;

调用完成。

sql> print income

    income

----------

     36000

1.1.3      

逻辑组合相关的过程和函数

-- 包规范
create or replace package emp_pkg is
  procedure update_sal(namevarchar2, newsal number);
  function annual_income(namevarchar2) returnnumber;
end;

-- 包体
create or replace package body emp_pkg is
       procedure update_sal(namevarchar2, newsal number)
       is
       begin
            update emp set sal = newsal where lower(ename) = lower(name);
       end;
      
       function annual_income(namevarchar2) returnnumber
       is
         annual_salary number(
7 , 2 );
       begin
            select sal *
12 nvl(comm, 0 ) into annual_salary from emp where lower(ename) = lower(name);
            return annual_salary;
       end;
end;
/

调用:

sql> call emp_pkg .update_sal('smith',1500);

or

sql> var income number

sql> call emp_pkg . annual_income('scott') into : income;

调用完成。

sql> print income

    income

----------

     36000

1.4     触发器

     是隐含执行的存储过程。

create or replace trigger update_cascade
 afterupdateof deptno on dept
 foreachrow
begin
     update emp set deptno=:new.deptno
     where deptno=:old.deptno;
end;
/    

1.5     标量变量

1.1.4       特殊变量说明

long(32760 字节 ) varchar2(32767 字节 ) 类似,定义变长的字符串

long raw 用于定义变长的二进制数据 (32760 字节 )

binary_integer 定义整数,范围为: -2147483647~2147483647 ( 非表列使用 )

boolean true/false/null ( 非表列使用 )

binary_float/binary_double oracle10 所有

1.1.5       定义使用

identifier [constant] datatype [not null] [:= | default expr]

例如: v_valid boolean not null default false;

c_tax_rate constant number(3,2):=0.03;

v_ename emp.ename%type;

1.6     复合变量

1.1.6       pl/sql 记录

类似于高级语言中的结构

declare
type emp_record_type isrecord(
    name emp.ename%type,
    salary emp.sal%type,
  title emp.job%type
);
emp_record emp_record_type;
begin
     select ename,sal,job into emp_record from emp where empno=
7788 ;
     dbms_output.put_line(
' 雇员名 ' ||emp_record.name);
end;
/    

1.1.7       pl/sql

类似于高级语言中的数组,下标可以为负 , 个数无限制。

declare
type ename_table_type istableof emp.ename%type
     indexbybinary_integer;
     ename_table ename_table_type;
begin
     select ename  into ename_table(-
1 ) from emp where empno= 7788 ;
     dbms_output.put_line(
' 雇员名 ' ||ename_table(- 1 ));
end;
/    

1.1.8       嵌套表

类似于高级语言中的数组,下标不可以为负,个数无限制。

create or replace type emp_type  asobject(
       namevarchar2(
10 ),
       salary number(
6 , 2 ),
       hiredate date
);
/
createorreplacetype emp_array istableof emp_type;
/

createorreplacetable department(
       deptno number(
2 ),
       dname varchar2(
10 ),
       employee emp_array      
)nestedtable employee storeas employee;

 

1.1.9       varray

varray 类似于嵌套表,它可以作为表列和对象类型属性的数据类型,个数有限制。

create or replace type article_type  asobject(
       title varchar2(
30 ),
       pubdate date
);
/
createorreplacetype article_array isvarray(
20 ) of article_type;
/

createorreplacetable author(
       idnumber(
6 ),
       namevarchar2(
10 ),
       article article_array      
);

1.7     参照变量

用于存放数值指针的变量。使得应用程序共享相同对象,从而降低占用空间。

1.1.10 ref cursor

游标变量

declare
  type c1 isrefcursor;
  emp_cursor c1;
  v_ename emp.ename%type;
  v_sal   emp.sal%type;
begin
  open emp_cursor for
    select ename, sal from emp ;
--where deptno = 10;
  loop
    fetch emp_cursor
      into v_ename, v_sal;
    exitwhen emp_cursor%notfound;
    dbms_output.put_line(v_ename);
  endloop;
  close emp_cursor;
end;
/

1.1.11 ref obj_type

为了共享相同对象,可以用 ref 引用对象类型。

create or replace type home_type as object(

       street varchar2(50),city varchar2(20),

       state varchar2(20),zipcode varchar2(6),

       owner varchar2(10)

);

/

create table homes of home_type;

insert into homes values(' 呼伦北路 12 ',' 呼和浩特 ',' 内蒙 ','010010',' 马鸣 ');

insert into homes values(' 呼伦北路 13 ',' 呼和浩特 ',' 内蒙 ','010010',' 秦斌 ');

create table person(

       id number(6) primary key,

       name varchar2(10), addr ref home_type

);

insert into  person select 1,' 马鸣 ',ref(p) from homes p where p.owner=' 马鸣 ';

1.8     lob 变量

内部 : clob blob nclob ;外部: bfile

1.9     pl/sql 变量

1.1.12 使用 sql*plus 变量

var namevarchar2( 10 )
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end;
/
print name  

 

1.1.13 使用 procedure builder 变量

.createcharname length 10
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end;
/
text_to.put_line(:name);  

1.1.14 使用 pro*c/c 变量

char name[ 10 ];
execsqlexecute
begin
     select ename into :namefrom emp
     where empno=
7788 ;
end-exec;
printf(
' 雇员名: %s\n' ,name);
posted on 2006-08-21 21:39 鱼上游 阅读(3513) 评论(0)  编辑  收藏 所属分类: 爪哇友邻真不少
2006年8月
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(82)

  • management it
  • open source host
  • java's opensource
  • open source,java
  • quick update
  • opensymphony
  • sourceforge
  • software's authority

搜索

  •  

积分与排名

  • 积分 - 1261225
  • 排名 - 22

最新评论

阅读排行榜

网站地图