oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载

主要内容:

有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢?

参考以下代码:

FUNCTION CALCULATE_TARGET_SCORE (CUR_MONTH IN NVARCHAR2)

RETURN NCLOB

IS

PRAGMA AUTONOMOUS_TRANSACTION;

TVALUE_SQL          VARCHAR2 (2000);         --查询目标值的sql(不能把类型声明为NVARCHAR2)

RESULT_STR          NCLOB;

KPI_VALUE           NVARCHAR2 (200);

CUR_MONTH_BILL_ID   NUMBER (19);                                    --固话单ID

BEGIN

--获得当前固话单

SELECT MAX (ID)

INTO CUR_MONTH_BILL_ID

FROM GP_MONTH_BILL

WHERE MONTH = CUR_MONTH AND IS_USE = 1;

--循环获得每个明细的完成值sql

IF CUR_MONTH_BILL_ID > 0                                             --区县指标

THEN

TVALUE_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;

BEGIN

EXECUTE IMMEDIATE TVALUE_SQL INTO KPI_VALUE;      --执行sql,得到完成值kpi_value

EXCEPTION

WHEN OTHERS

THEN

RESULT_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 VAL

2)如果要通过查询方式调用函数,同时函数中包含DML 语句时,在声明函数需要加入 PRAGMA AUTONOMOUS_TRANSACTION;

查询调用函数示例: SELECT YOUR_FUN(VAL1,VAL2...)  FROM DUAL;

3)如果函数声明中含有 PRAGMA AUTONOMOUS_TRANSACTION; 则在函数结尾加入commit 或 rollback

关联阅读:ORA-14551: 无法在查询中执行 DML 操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值