oracle11g PL/SQL编程摘要

相信很多博友使用过oracle数据库,不管是工作还是日常学习,今天给大家分享一些oracle编程技巧,涉及到条件IFELSE、循环LOOP、游标CURSOR、存储过程PROCEDURE,函数FUNCTION,希望能帮到各位。

在PL/SQL中,IF、THEN、ELSE、ELSIF和ENDIF等关键字用于执行条件逻辑:
语法:

IF condition1 THEN
statement1
ELSIF condition2 THEN
statement2
ELSE
statement3
END IF;

condition表示条件,statement表示结果。

在PL/SQL中三种循环:一、简单循环;二、while循环;三、for循环:
简单循环语法:

LOOP
statement
END LOOP;

while循环语法:
while condition1 LOOP
  statement
END LOOP;

在PL/SQL中,可以使用游标来获取查询结果,使用游标一般遵循5个步骤:
(1)声明变量,用于保存记录的列值;
(2)生命游标,并指定查询;
(3)打开游标;
(4)一次从游标中获取一个记录,并将列值储存在(1)声明的变量中;
(5)关闭游标。
语法和实例:

set serveroutput on 
--声明变量--
declare 
v_userId FS_PT_YW_BASE_USER.I_USERID%TYPE;
v_username FS_PT_YW_BASE_USER.C_USERNAME%TYPE;
v_userRealName FS_PT_YW_BASE_USER.C_USEREALNAME%TYPE;

--定义游标--
CURSOR cursor_baseUser is select I_USERID,C_USERNAME,C_USEREALNAME from fs_pt_yw_base_user;


begin
  --打开游标--
   open cursor_baseUser;

   --从游标中获取记录--
   loop 
        fetch cursor_baseUser into v_userId,v_username,v_userRealName;
        EXIT WHEN cursor_baseUser%NOTFOUND;
        Dbms_Output.put_line(
             'v_userId=' || v_userId || ',v_username=' || v_username || ',v_userRealName=' || v_userRealName
        );
   END loop;

   --关闭游标--
   close cursor_baseUser;
END;

有的时候我们想要获取查询结果,有可能要传参数查询,这样视图可能满足不了我们的需求,我们可以使用存储过程procedure来帮助我们:
语法与实例:

CREATE OR REPLACE procedure "GET_TEST"(
whereValue1 IN VARCHAR2,
whereValue2 IN VARCHAR2,
p_cur out sys_refcursor)
AS
begin
    if (whereValue2 IS NULL OR whereValue2 = '' OR whereValue2 = '430000') then
        open p_cur for
        SELECT
          *
        FROM
          tabA
     elsif length(whereValue2)=6 AND substr(whereValue2,4,6) = '00' then
        open p_cur for
        SELECT
          *
        FROM
          tabB
     else 
        open p_cur for
        SELECT
          *
        FROM
          tabC

     end if;

end GET_TEST;

PL/SQL中也可以自定义函数使用FUNCTION:
语法与实例:

CREATE OR REPLACE function GET_COUNTRESULT(vfieldname  in varchar2,vtablename  in varchar2,vWhereString IN varchar2)
  return number is
  item_cjvalue number(20);
  v_sql       varchar2(200);
begin
  IF (vWhereString IS NOT NULL)
    THEN
    v_sql := 'select count(' || vfieldname || ') from ' || vtablename || ' where ' || vWhereString;
  ELSE
    v_sql := 'select count(' || vfieldname || ') from ' || vtablename;
  END IF;
  execute immediate v_sql into item_cjvalue ;
  return item_cjvalue ;
end GET_COUNTRESULT;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值