示例代码:
- CREATE OR REPLACE FUNCTION "MY_DATABASE"."F_GET_USER_COUNT_BY_DEPART"
- (
- DEPART_ID_VAL in long
- )
- return varchar2
- is
- USER_STATE varchar(16);
- USER_COUNT number;
- begin
- select count(*) into USER_COUNT from TB_USER_INFO where DEPART_ID=DEPART_ID_VAL;
- if USER_COUNT > 0 then
- USER_STATE:='该部门下有用户';
- else
- USER_STATE:='该部门下无用户';
- end if;
- return (USER_STATE);
- end;
解释:
- CREATE OR REPLACE FUNCTION "数据库名称"."函数名"
- (
- 参数一 [in,out] 类型,
- 参数二 [in,out] 类型,
- ...
- )
- return 返回值类型
- is
- 变量一 类型;
- 变量二 类型;
- ... ;
- begin
- /*给变量赋值的过程*/
- return (变量一或变量二或...);
- end;
- 参数有两种类型,in或者out;可以创建不带参数的函数;
- 多个参数之间用“,”隔开;多个变量之间用“;”隔开;
- CREATE OR REPLACE FUNCTION INFODBA.H3C_GetECADocNumListByECROBID (ECRPUID IN VARCHAR2)
- RETURN VARCHAR2
- /*
- 用途:依据传入的【ECRPUID】获取该ECR下的所有ECA的单号列表,多条以逗号分隔
- */
- IS
- ExecSQL VARCHAR2 (1000);
- RESULT VARCHAR2 (1000);
- TMPESULT VARCHAR2 (1000);
- BEGIN
- --1.如果传入的ECR的OBID是空,则直接返回一个空字符串
- IF (LENGTH (ECRPUID)<1) THEN
- RETURN ('Err:函数参数输入不正确,请联系系统管理员调整SQL!');
- END IF;
- --2. 循环查询结果,逐一拼接SQL,执行获取ECA申请单号,并拼接成以逗号为分隔符的字符串
- FOR ECAList IN ( SELECT ITEM.PITEM_ID
- FROM infodba.pimanrelation s2ECRECA,
- infodba.pitem item,
- infodba.pitemrevision itemrevision
- WHERE 1 = 1
- AND itemrevision.ritems_tagu = item.PUID
- AND itemrevision.PUID = s2ECRECA.RSECONDARY_OBJECTU
- AND s2ECRECA.RPRIMARY_OBJECTU = ECRPUID
- )
- LOOP
- --如果有查询结果,则拼接'
- IF (NVL(ECAList.PITEM_ID,'NoRecords') != 'NoRecords') THEN
- RESULT := RESULT ||ECAList.PITEM_ID || ',';
- END IF;
- END LOOP;
- --截取掉最后一个多余的逗号
- RESULT := SUBSTR (RESULT, 0, LENGTH (RESULT) - 1);
- RETURN result;
- EXCEPTION
- WHEN OTHERS
- THEN
- RETURN ('Err:可能的出错原因是从PDM读取的字符串超长,请联系PDM系统管理员处理。');
- END;
- /
DROP TRIGGER INFODBA.TRIGGER_PROTECT_PDATA_UPDATE;
CREATE OR REPLACE TRIGGER INFODBA.TRIGGER_PROTECT_PDATA_UPDATE
BEFORE UPDATE ON INFODBA.PDATA referencing old as OLDROW new as NEWROW
for each row
DECLARE
BEGIN
IF (ABS(LENGTH(:OLDROW.PVAL)-LENGTH(:NEWROW.PVAL))>100) THEN
RAISE_APPLICATION_ERROR(-20000, 'Illegal behavior,if there is a need, please contact the administrator to stop the trigger TRIGGER_PROTECT_PDATA_UPDATE.');
END IF;
END;
/