oracle11g PLSQL编程摘要

xiaoxiao2021-02-28  60

相信很多博友使用过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;
转载请注明原文地址: https://www.6miu.com/read-84874.html

最新回复(0)