zoukankan      html  css  js  c++  java
  • oracle SQL语句

    Oracle数据库语句大全

    ORACLE支持五种类型的完整性约束

    NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.

    CHECK (检查)--检查在约束中指定的条件是否得到了满足.

    UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.

    PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.

    POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

     

    1--设置每行显示多少字符  set linesize  300;

    2 设置每页显示多少条记录 set pagesize 30;

    3 用户名的切换: 如 conn system/tiger Conn sys/change_on_install as sysdba(注意超级用户 在后面加as sysdba)

    4 在超级用户下查找普通用户的表是查不到的 必须这样查找  如 select * from scott.emp(普通用户下的emp表)

    5 查看当前是那个用户身份登录: show user;

    6 查看有多少张表: select * from tab;(注意不同用户下的表是不同的)

    7查看表的结构: desc emp(emp为表名)

    8 取出重复的列(DISTINCT): 如 SELECT DISTINCT  JOB EMP(去掉job的重复的值)

    9字符串的链接操作用:  ||

    10 查询有奖金的员工: select* from emp where comm is not null;

    11 查询没有奖金的员工信息: select * from emp where comm is null;

    12 两个条件以上就得用and 如查询工资大雨1500和有奖金的员工 select * from emp where sal>1500  and comm is not null;

    13 表示两个条件有一个满足就可就用:or 如查询工资大于1500或者没有奖金的员工信息 Select * from emp where sal>1500 or comm is not null;

    14取反可以用not 如 查询员工工资不大于1500和有奖金的员工信息 如: Select * from emp where not (sal>1500  or comm is not null);

    15 在什么什么之间用between----and----如查询工资在1500和3000之间的员工信息: Select * from emp  where sal  between 1500 and 3000;

    16   查询员工编号是2323, 4555, 2222的员工具体信息: 如 Select * from emp where empno in(2323,4555,2222);

    17.l模糊查询  like 一般结合"%"和"_"使用其中%:表示可以匹配任意长度的内容,"_"表示匹配一个长度放入内容  如:  

    查询员工姓名中第二哥字母是M的员工信息:Select * from emp where ename LIKE '_M%';

    又如姓名中包含M的员工  Select * from emp where ename LIKE  '%M%';

    18oracle中不等于有两种表示方式"<>"和"!="

    19 排序用order by {asc desc}其中asc 是升序排列 如果不写就默认按升序排列desc是按降序排列  排序语句放在sal语句的最后如: 

    按员工工资进行排序

    Select * from emp order by sal asc(升序)

    Selecct * from emp order by sal desc(降序)

    Select * from emp where deptno='10' order by sal desc,hiredate asc;(查询部门10的员工工资的升序排列如果工资相等就按员工的入职时间排序)

    20.group by 用于对查询的结果进行分组统计: 显示每个部门的平均工资和最高工资  如:Select avg(sal),max(sal) from emp group by deptno;

    21.Having  子句用于限制分组显示结果: 显示平均工资大于2000的的部门号和他的平均工资,如:select avg(sal), deptno from emp group by deptno having avg(sal)>2000;

    2. 单行函数:

    1 小写变大写: upper 如 select * from emp where ename=upper('smith');

    将一个字符串变为小写字母表示 如:  select  lower('HELLO WORLD') FROM DUAL;

    将单词的首字母变大写 用 INITCAP 如: SELECT INITCAP('HELLO WORLD') FROM DUAL;

    2.字符串的操作

    Substr()截取字符串 length()字符串的长度 replace()替换字符串

    3数值函数

    四舍五入: round();

    截断小数位:trunc();

     

    一.入门部分

    1.    创建表空间
    create tablespace schooltbs datafile ‘D:oracledatasourceschooltbs.dbf’ size 10M autoextend on;

    2.    删除表空间
    drop tablespace schooltbs[including contents and datafiles];

    3.    查询表空间基本信息
    select *||tablespace_name from DBA_TABLESPACES;

    4.    创建用户
    create user  lihua
    identified by lihua
    default tablespace schooltbs
    temporary tablespace temp;

    5.    更改用户
    alter user lihua
    identified by 123
    default tablespace users;

    6.    锁定用户
    alter user lihua account lock|unlock;

    7.    删除用户
    drop user lihua cascade;--删除用户模式

    8.    oracle数据库中的角色
    connect,dba,select_catalog_role,delete_catalog_role,execute_catalog_role,exp_full_database,imp_full_database,resource

    9.    授予连接服务器的角色
    grant connect to lihua;

    10.授予使用表空间的角色
    grant resource to lihua with grant option;--该用户也有授权的权限

    11.授予操作表的权限
    grant select,insert on user_tbl to scott;--当前用户
    grant delete,update on lihua.user_tbl to scott;--系统管理员

    12.修改表的结构(alter)

    Alter table  表名 add(列的名称,列的类型);

    二.SQL查询和SQL函数

    1.SQl支持的命令:
    数据定义语言(DDL):create,alter,drop
    数据操纵语言(DML):insert,delete,update,select
    数据控制语言(DCL):grant,revoke
    事务控制语言(TCL):commit,savepoint,rollback

    2.Oracle数据类型
    字符,数值,日期,RAW,LOB
    字符型
    char:1-2000字节的定长字符

    varchar2:1-4000字节的变长字符
    long:2GB的变长字符
     注意:一个表中最多可有一列为long型

    Long列不能定义唯一约束或主键约束

    long列上不能创建索引

    过程或存储过程不能接受long类型的参数。

    数值型
    number:最高精度38位

    日期时间型
    date:精确到ss
    timestamp:秒值精确到小数点后6位

    函数
    sysdate,systimestamp返回系统当前日期,时间和时区。

    更改时间的显示
    alter session set nls_date_language=’american’;
    alter session set nls_date_format=’yyyy-mm-dd’;

    Oracle中的伪列
    像一个表列,但没有存储在表中

    伪列可以查询,但不能插入、更新和修改它们的值
    常用的伪列:rowid和rownum
    rowid:表中行的存储地址,可唯一标示数据库中的某一行,可以使用该列快速定位表中的行。
    rownum:查询返回结果集中的行的序号,可以使用它来限制查询返回的行数。

    3.数据定义语言

    用于操作表的命令
    create table
    alter table
    truncate table
    drop table

    修改表的命令
    alter table stu_table rename to stu_tbl;--修改表名
    alter table stu_tbl rename column stu_sex to sex;--修改列名
    alter table stu_tbl add (stu_age number);--添加新列
    alter table stu_tbl drop(sex);--删除列
    alter table stu_tbl modify(stu_sex varchar2(2));--更改列的数据类型
    alter table stu_tbl add constraint pk_stu_tbl primary key(id);--添加约束

    4.数据操纵语言

    select,update,delete,insert
    利用现有的表创建表
    create table stu_tbl_log as select id,stu_name,stu_age from stu_tbl;--
    选择无重复的行

    select distinct stu_name from stu_tbl;--
    插入来自其他表中的记录
    insert into stu_tbl_log select id,stu_name,stu_age from stu_tbl;

    5.数据控制语言
    grant,revoke
    6.事务控制语言
    commit,savepoint,rollback
    7.SQL操作符
    算术操作符:L+-*/
    比较操作符:L=,!=,<>,>,<,>=,<=,between-and,in,like,is null等
    逻辑操作符:Land,or,not
    集合操作符:Lunion,union all,intersect,minus
    连接操作符:L||
    示例中stu_tbl_log中的数据如下:
            ID STU_NAME                STU_AGE

    ---------- -------------------- ----------

          1000 李华                          20

          1001 accp                         20

          1003 nimda                         3
    stu_tbl中的数据如下:
            ID STU_NAME             ST    STU_AGE

    ---------- -------------------- -- ----------

          1000 李华                  男         20

          1001 accp                 男         20

          1002 admin                男         30
    示例:
    select (3+2)/2 from dual;--算术操作符,结果:2.5
    select * from stu_tbl where stu_age>=20;--比较操作符
    select * from stu_tbl where stu_name like '%a%';--比较操作符:like
    select * from stu_tbl where stu_name like 'a___';--比较操作符:like
    select * from stu_tbl where stu_age in(20,30);--比较操作符:in
    select * from stu_tbl where stu_age between 20 and 30;--比较操作符:between
    select stu_name from stu_tbl union all
    select stu_name from stu_tbl_log;--集合操作符:union all,测试结果具体如下:
    STU_NAME

    -----------

    李华

    accp

    admin

    李华

    accp

    nimda

     

    已选择6行。
    select stu_name from stu_tbl union
    select stu_name from stu_tbl_log;--集合操作符:union,测试结果具体如下:
    STU_NAME

    ---------

    accp

    admin

    nimda

    李华
    select stu_name from stu_tbl intersect
    select stu_name from stu_tbl_log;--集合操作符:intersect,测试结具体如下:
    STU_NAME

    ----------

    accp

    李华
    select stu_name from stu_tbl minus
    select stu_name from stu_tbl_log;--集合操作符:minus,测试结果如下:
    STU_NAME

    ----------

    Admin
    从中可以看出:
    minus是获取第一张表独有的数据

    intersect是获取两张表中都有的数据
    union是整合两张表的数据,都有的只显示一次
    union all是纯粹的两张表数据整合
    select id,stu_name||' '||stu_sex as name_sex,stu_age
    from stu_tbl;--连接操作符||,测试结果具体如下:
            ID NAME_SEX                   STU_AGE

    ---------- ----------------------- ----------

          1000 李华    男                         20

          1001 accp   男                         20

          1002 admin  男                         30

    8.SQL函数
    单行函数:从表中查询的每一行只返回一个值,可出现在select子句,where子句中

    日期函数

    数字函数

    字符函数

    转换函数:ToChar(),ToDate(),ToNumber()

    其他函数:

    Nvl(exp1,exp2):表达式一为null时,返回表达式二

    Nvl2(exp1,exp2,exp3):表达式一为null时返回表达式三,否则返回表达式二

    Nullif(exp1,exp2):两表达式相等时,返回null,否则返回表达式一
    分组函数:基于一组行来返回

    Avg,Min,Max,Sum,Count

    Group by,having
    分析函数

    Row_number,rank,dense_rank
    示例:
    select u.user_name,sum(oi.order_num*oi.order_price) as total,row_number() over (order by sum(oi.order_num*oi.order_price) desc) as sort from order_item_tbl

      oi,user_tbl  u,order_tbl  o where oi.order_id = o.id and o.user_id = u.id group by u.user_name;

     

    三.锁和数据库对象

    1.锁:数据库用来控制共享资源并发访问的机制。
    锁的类型:行级锁,表级锁
    行级锁:对正在被修改的行进行锁定。行级锁也被称之为排他锁。
    在使用下列语句时,Oracle会自动应用行级锁:
    insert,update,delete,select…… for update
    select……for update允许用户一次锁定多条记录进行更新。
    使用commit or rollback释放锁。
    表级锁:
    lock table user_tbl in mode mode;
    表级锁类型:
    行共享 row share
    行排他 row exclusive
    共享 share
    共享行排他 share row exclusive
    排他 exclusive
    死锁:两个或两个以上的事务相互等待对方释放资源,从而形成死锁
    2.数据库对象
    oracle数据库对象又称模式对象
    数据库对象是逻辑结构的集合,最基本的数据库对象是表
    数据库对象:

    表,序列,视图,索引

    序列
    用于生成唯一,连续序号的对象。

    创建语法:
    create sequence user_id_seq
    start with 1000
    increment by 1
    maxvalue 2000
    minvalue 1000
    nocycle
    cache 1000;--指定内存中预先分配的序号
    访问序列:
    select user_id_seq.currval from dual;
    select user_id-seq.nextval from dual;

    更改删除序列:
    alter sequence user_id_seq maxvalue 10000;--不能修改其start with 值
    drop sequence user_id_seq;
    在Hibernate中访问序列:

         
    user_id_seq

     

    视图
    以经过定制的方式显示来自一个或多个表的数据

    创建视图:
    create or replace view
    user_tbl_view (vid,vname,vage)
    as select id,user_name,age from user_tbl
    [with check option]|[with read only];
    创建带有错误的视图:
    create force view user_tbl_force_view as
    select * from user_table;--此时user_table可以不存在
    创建外联接视图:
    create view user_stu_view as
    select u.id,u.user_name,u.password,s.ddress
    from user_tbl u,stu_tbl s
    where u.s_id(+)=s.id;--哪一方带有(+),哪一方就是次要的
    删除视图:
    drop user_stu_view;

     

    索引
    用于提高SQL语句执行的性能
    索引类型:
    唯一索引,位图索引,组合索引,基于函数的索引,反向键索引

    创建标准索引:
    create index user_id_index on user_tbl(id) tablespace schooltbs;
    重建索引:
    alter index user_id_index rebuild;
    删除索引:
    drop index user_id_index;

    创建唯一索引:
    create unique index user_id_index on user_tbl(id);
    创建组合索引:
    create index name_pass_index on user_tbl(user_name,password);
    创建反向键索引:
    create index user_id_index on user_tbl(id) reverse;

     

    四.使用PL/SQL

    可用于创建存储过程,触发器,程序包,给SQL语句的执行添加程序逻辑。
    支持SQL,在PL/SQL中可以使用:

    数据操纵命令
    事务控制命令
    游标控制
    SQL函数和SQL运算符

    支持面向对象编程(OOP)

    可移植性

    更佳的性能,PL/SQL经过编译执行

     

    分为三个部分:声明部分,可执行部分和异常处理部分
    [declare
    declarations]
    begin
    executable statements
    [exception
    handlers]
    end;

    打开输出
    set serverout on;

     

    --根据输入编号获取某学员的成绩--if

    declare

    score user_tbl.score%type;

    begin

    select score into score from user_tbl where id='&id';

    if score>90 then

    dbms_output.put_line('优秀');

    elsif score>80 then

    dbms_output.put_line('良好');

    elsif score>60 then

    dbms_output.put_line('及格');

    else

    dbms_output.put_line('差');

    end if;

    end;

     

    --根据学员姓名获取某学员的成绩--if

    declare

    score user_tbl.score%type;

    begin

    select score into score from user_tbl where user_name='&name';

    if score>90 then

    dbms_output.put_line('优秀');

    elsif score>80 then

    dbms_output.put_line('良好');

    elsif score>60 then

    dbms_output.put_line('及格');

    else

    dbms_output.put_line('差');

    end if;

    end;

     

    --case的使用

    declare

    grade user_tbl.grade%type;

    begin

    select grade into grade from user_tbl where id='&id';

    case grade

    when 'A' then dbms_output.put_line('优异');

    when 'B' then dbms_output.put_line('优秀');

    when 'C' then dbms_output.put_line('良好');

    else dbms_output.put_line('一般');

    end case;

    end;

     

    --基本循环

    declare

    i number(4):=1;

    begin

    loop

    dbms_output.put_line('loop size:'||i);

    i:=i+1;

    exit when i>10;

    end loop;

    end;

     

     

    --while循环

    declare

    i number(4):=1;

    begin

    while i<=10 loop

    dbms_output.put_line('while loop size='||i);

    i:=i+1;

    end loop;

    end;

     

    --for循环

    declare

    i number(4):=1;

    begin

    for i in 1..10 loop

    dbms_output.put_line('for loop Size:'||i);

    end loop;

    end;

     

    declare

    i number(2):=1;

    j number(2):=1;

    begin

    for i in reverse 1..9 loop

    for j in 1..i loop

    dbms_output.put(j||'x'||i||'='||j*i||' ');

    end loop;

    dbms_output.put_line('');

    end loop;

    end;

     

    --动态SQL

    declare

    userId number(2);

    sql_str varchar2(100);

    userName user_tbl.user_name%type;

    begin

    execute immediate 'create table testExe(id number,test_name varchar2(20))';

    userId:='&userId';

    sql_str:='select user_name from user_tbl where id=:id';

    execute immediate sql_str into userName using userId;

    dbms_output.put_line(userName);

    end;

    (or

    declare

     id_param number:='&id_param';

     sql_str varchar2(100);

     name_param stu_tbl.stu_name%type;

     begin

     sql_str:='select stu_name from stu_tbl where id=:p';

     execute immediate sql_str into name_param using id_param;

     dbms_output.put_line(name_param);

     end;

     /

    )

     

    --异常处理

    declare

    grade number(4);

    begin

    grade:='&grade';

    case grade

    when 1 then dbms_output.put_line('好的');

    --else dbms_output.put_line('不好');

    end case;

    exception

    when case_not_found then

    dbms_output.put_line('输入类型不匹配!');

    end;


    --系统异常

    declare

    rowD user_tbl%rowtype;

    begin

    select * into rowD from user_tbl;

    dbms_output.put_line(rowD.id||''||rowD.user_name||' '||rowD.password);

    exception

    when too_many_rows then

    dbms_output.put_line('不能将多行赋予一个属性!');

    end;

    or

    declare

    rowD user_tbl%rowtype;

    begin

    select * into rowD from user_tbl where id=5;

    dbms_output.put_line(rowD.id||' '||rowD.user_name||' '||rowD.password);

    exception

    when too_many_rows then

    dbms_output.put_line('不能将多行赋予一个属性!');

    when no_data_found then

    dbms_output.put_line('没有您要查找的数据!');

    end;

     

    --自定义错误

    declare

    invalidError exception;

    category varchar2(20);

    begin

    category:='&category';

    if category not in('附件','顶盘','备件') then

    raise invalidError;

    else

    dbms_output.put_line('您输入的类别是:'||category);

    end if;

    exception

    when invalidError then

    dbms_output.put_line('无法识别的类别!');

    end;

     

    --引发应用程序异常

    declare

    app_exception exception;

    grade user_tbl.grade%type;

    begin

    select grade into grade from user_tbl where id=&id;

    if grade='A' then

    raise app_exception;

    else

    dbms_output.put_line('查询的等级为:'||grade);

    end if;

    exception

    when app_exception then

    raise_application_error(-20001,'未知的等级!');

    end;


    五、游标管理

    游标类型:隐式游标,显式游标,REF游标

    REF游标用于处理运行时才能确定的动态SQL查询的结果

     

    ==========隐式游标==========

    在PL/SQL中使用DML语句时自动创建隐式游标
    隐式游标自动声明、打开和关闭,其名为SQL

    隐式游标的属性:
    %found         SQL语句影响实质后返回true
    %notfound      SQL语句没有影响实质后返回true
    %rowcount      SQL语句影响的行数
    %isopen        游标是否打开,始终为false

    示例:

    begin

    update user_tbl set score=score+5;

    if SQL%found then

        dbms_output.put_line('数据被更改: '||SQL%rowcount);

    elsif sql%notfound then

        dbms_output.put_line('没有找到数据!');

    end if;

    if SQL%isopen then

        dbms_output.put_line('Open');

    else

        dbms_output.put_line('Close');

    end if;

    end;

     

    ==========显式游标==========

    在PL/SQL的声明部分定义查询,该查询可以返回多行

    J         声明游标

    J         打开游标

    J         从游标中取回数据

    J         关闭游标

    声明游标完成两个任务:

    给游标命名

    将一个查询与游标关联
    cursor cursor_name is select statement;

    打开游标:

        open cursor_name;

    取数据:

        fetch cursor_name into record_list;

    关闭游标:

        close cursor_name;

    显式游标的属性:

    %found         执行最后一条fetch语句成功返回行时为true

    %notfound      执行最后一条fetch语句未能返回行时为true

    %rowcount      返回到目前为止游标提取的行数

    %isopen        游标是否打开

     

    示例:

    declare

    users user_tbl%rowtype;

    cursor boys_cur is select * from user_tbl where sex='h';

    begin

    open boys_cur;

    loop

    fetch boys_cur into users;

    exit when boys_cur%notfound;

    dbms_output.put_line(users.user_name||'  '||users.password);

    dbms_output.put_line(boys_cur%rowcount);

    end loop;

    close boys_cur;

    end;

     

    带参的显式游标

    declare

    users user_tbl%rowtype;

    cursor boys_cur(sexParam varchar2)

    is select * from user_tbl where sex=sexParam;

    begin

    open boys_cur('&sex');

    loop

    fetch boys_cur into users;

    exit when boys_cur%notfound;

    dbms_output.put_line(users.user_name||'  '||users.password);

    dbms_output.put_line(boys_cur%rowcount);

    end loop;

    close boys_cur;

    end;

     

    使用显式游标更新行

    declare

    cursor user_update_cur is select sex from user_tbl for update;

    usersex user_tbl.sex%type;

    begin

    open user_update_cur;

    loop

    fetch user_update_cur into usersex;

    exit when user_update_cur%notfound;

    dbms_output.put_line(usersex);

    if usersex = 'M' then

        update user_tbl set score=score-5 where current of user_update_cur;

    else

        update user_tbl set score=score+5 where current of user_update_cur;

    end if;

    end loop;

    close user_update_cur;

    commit;

    end;

     

    循环游标

    declare

    cursor user_cur is select * from user_tbl;

    begin

    for username in user_cur loop

        dbms_output.put_line(username.user_name||'  '||username.sex);

    end loop;

    end;

     

    ==========REF游标==========

    REF游标和游标变量用于处理运行时动态执行的SQL查询

    创建游标变量的步骤:

    J         声明REF游标类型

    J         声明REF游标类型的变量

    声明类型的语法

    Type ref_cursor_name is ref cursor [return return_type];

    打开游标变量的语法

    Open cursor_name for select_statement;

    ----声明强类型的游标

    declare

    type ref_cur is ref cursor return user_tbl%rowtype;

    users_cur ref_cur;

    ----声明弱类型的游标

    declare

    type ref_cur is ref cursor;

    users_cur ref_cur;

    示例

    ----强类型

    declare

    type ref_cur is ref cursor return user_tbl%rowtype;

    users_cur ref_cur;

    users user_tbl%rowtype;

    begin

    open users_cur for select * from user_tbl where user_name='ny2t92';

    loop

        fetch users_cur into users;

        exit when users_cur%notfound;

        dbms_output.put_line(users.user_Name);

    end loop;

    close users_cur;

    end;

    ----弱类型

    declare

    type ref_cur is ref cursor;

    my_cur ref_cur;

    users user_tbl%rowtype;

    stus stu_tbl%rowtype;

    begin

    open my_cur for select * from user_tbl;

    loop

        fetch my_cur into users;

        exit when my_cur%notfound;

        dbms_output.put_line(users.user_Name);

    end loop;

    close my_cur;

    open my_cur for select * from user_tbl where user_name='ny2t92';

    loop

        fetch my_cur into users;

        exit when my_cur%notfound;

        dbms_output.put_line(users.user_Name);

    end loop;

    close my_cur;

    open my_cur for select * from stu_tbl;

    loop

    fetch my_cur into stus;

    exit when my_cur%notfound;

    dbms_output.put_line(stus.stu_Name);

    end loop;

    close my_cur;

    end;

    ----动态SQL游标

    declare

    type ref_cur is ref cursor;

    my_cur ref_cur;

    users user_tbl%rowtype;

    username varchar2(20);

    sqlstmt varchar2(200);

    begin

    username:='&username';

    sqlstmt := 'select * from user_tbl where user_name= :name';

    open my_cur for sqlstmt using username;

    loop

        fetch my_cur into users;

        exit when my_cur%notfound;

        dbms_output.put_line(users.user_Name);

    end loop;

    close my_cur;

    end;

     

    六.子程序

    子程序分为:存储过程和函数,它是命名的PL/SQL块,编译并存储在数据库中。

    子程序的各个部分:声明部分,可执行部分,异常处理部分。

    过程----执行某些操作

    函数----执行操作并返回值

     

    ==========存储过程==========

    创建过程的语法:

    create or replace procedure

    proce_name (parameter_list)

    is|as

    local variable declaration

    begin

    executable statements

    exception

    exception_handlers

    end proce_name;

     

    过程参数的三种模式:

    In----用于接收调用的值,默认的参数模式

    Out----用于向调用程序返回值

    In out----用于接收调用程序的值,并向调用程序返回更新的值

    执行过程的语法:

    Execute proce_name(parameter_list);

    Declare

    Variable var_list;

    Begin

    Proce_name(var_list);

    End;

    将过程执行的权限授予其他用户:

    Grant execute on proce_name to scott;

    Grant execute on proce_name to public;

    删除存储过程:

    Drop procedure proce_name;

     

    ==========函数==========

    创建函数的语法:

    Create or replace function

    Fun_name (parameter_list)

    Return datatype is|as

    Local declarations

    Begin

    Executable statements;

    Return result;

    Exception

    Exce_handlers;

    End;

    函数只能接收in参数,不能接受out或in out参数,形参不能是PL/SQL类型

    函数的返回类型也必须是数据库类型

    访问函数的方式:

    J         使用PL/SQL块

    J         使用SQL语句

    Select fun_name(parameter_list) from dual;

  • 相关阅读:
    一个简单的knockout.js 和easyui的绑定
    knockoutjs + easyui.treegrid 可编辑的自定义绑定插件
    Knockout自定义绑定my97datepicker
    去除小数后多余的0
    Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR
    Azure ARM (1) UI初探
    Azure Redis Cache (3) 创建和使用P级别的Redis Cache
    Windows Azure HandBook (7) 基于Azure Web App的企业官网改造
    Windows Azure Storage (23) 计算Azure VHD实际使用容量
    Windows Azure Virtual Network (11) 创建VNet-to-VNet的连接
  • 原文地址:https://www.cnblogs.com/FZ1314/p/5738896.html
Copyright © 2011-2022 走看看