阿里云虚拟主机如何上传网站,平面设计学习,网络组建与维护心得体会,手机参数网主要内容#xff1a;有时#xff0c;我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句#xff0c;然后再执行拼凑后的sql字符串#xff0c;如何做到呢#xff1f;参考以下代码#xff1a;FUNCTION CALCULATE_TARGET_SCORE (CUR_MONTH IN NVARCHAR2)RETURN NCLOB…主要内容有时我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句然后再执行拼凑后的sql字符串如何做到呢参考以下代码FUNCTION CALCULATE_TARGET_SCORE (CUR_MONTH IN NVARCHAR2)RETURN NCLOBISPRAGMA AUTONOMOUS_TRANSACTION;TVALUE_SQL VARCHAR2 (2000); --查询目标值的sql(不能把类型声明为NVARCHAR2)RESULT_STR NCLOB;KPI_VALUE NVARCHAR2 (200);CUR_MONTH_BILL_ID NUMBER (19); --固话单IDBEGIN--获得当前固话单SELECT MAX (ID)INTO CUR_MONTH_BILL_IDFROM GP_MONTH_BILLWHERE MONTH CUR_MONTH AND IS_USE 1;--循环获得每个明细的完成值sqlIF CUR_MONTH_BILL_ID 0 --区县指标THENTVALUE_SQL :SELECT TO_CHAR(|| CUR_ROW.MAIN_FIELD|| ) FROM || CUR_ROW.END_TABLE|| _|| CUR_MONTH|| WHERE TO_CHAR(DISTRICT_ID)|| CUR_ROW.E_DISTRICT_ID|| ;ELSE --客户经理指标TVALUE_SQL :SELECT TO_CHAR(|| CUR_ROW.MAIN_FIELD|| ) FROM || CUR_ROW.END_TABLE|| _|| CUR_MONTH|| WHERE MANAGER_NO|| CUR_ROW.MANAGER_NO|| ;END IF;BEGINEXECUTE IMMEDIATE TVALUE_SQL INTO KPI_VALUE; --执行sql得到完成值kpi_valueEXCEPTIONWHEN OTHERSTHENRESULT_STR :RESULT_STR|| sql执行错误:|| TVALUE_SQL|| INTO KPI_VALUE;END;--一些sql逻辑含dml语句COMMIT;END;关键语句EXECUTE IMMEDIATE TVALUE_SQL INTO KPI_VALUE;本项目涉及到的知识点1)在该示例中需要把查询的值动态赋值给一个变量。注意变量的赋值不是在sql字符串中去拼凑而是在执行sql字符串时在末尾加入 INTO VAL2)如果要通过查询方式调用函数同时函数中包含DML 语句时在声明函数需要加入 PRAGMA AUTONOMOUS_TRANSACTION;查询调用函数示例 SELECT YOUR_FUN(VAL1,VAL2...) FROM DUAL;3)如果函数声明中含有 PRAGMA AUTONOMOUS_TRANSACTION; 则在函数结尾加入commit 或 rollback关联阅读ORA-14551: 无法在查询中执行 DML 操作