ORA-14551: 无法在查询中执行 DML 操作

鄙人oracle小菜,今天写了个函数,仅有一个insert语句,如下:

CREATE OR REPLACE FUNCTION WZ_CUST_CIQ_INF.F_AUTO_EDI_PROC_LOG(
  VS_REC_NAM      VARCHAR2,
  VS_MODULE       VARCHAR2,
  VS_ORDER_GUID   VARCHAR2,
  VS_ORDER_TYP    VARCHAR2,
  VS_PROC_NAM     VARCHAR2,
  VS_PROC_RETURN  VARCHAR2)
RETURN VARCHAR2 IS

VS_IP_ADDR      S_CUST_CIQ_PROC_LOG.IP_ADDR%TYPE;
VS_GUID         S_CUST_CIQ_PROC_LOG.GUID%TYPE;

BEGIN
   --IP地址
   select sys_context('userenv','ip_address') INTO VS_IP_ADDR from dual;
   --GUID
   SELECT SEQ_PROC_LOG_GUID.NEXTVAL INTO VS_GUID FROM DUAL;
   
   Insert into WZ_CUST_CIQ_INF.S_CUST_CIQ_PROC_LOG
   (GUID, REC_TIM, REC_NAM, IP_ADDR, MODULE, 
    ORDER_GUID, ORDER_TYP, PROC_NAM, PROC_RETURN) 
   Values(VS_GUID, SYSDATE, VS_REC_NAM, VS_IP_ADDR, VS_MODULE, 
   VS_ORDER_GUID,VS_ORDER_TYP, VS_PROC_NAM, VS_PROC_RETURN);
   COMMIT;
   RETURN '99';
EXCEPTION 
   WHEN OTHERS THEN
    ROLLBACK;
    RETURN SQLERRM;
END;
/
然后我就在过程中

SELECT  F_AUTO_EDI_PROC_LOG( VS_OPER_COD, '国检指令自动执行', VS_GUID, '3', 'P_AUTO_EDI_PROCESS', VS_RTN )

      INTO  VS_LOG_RTN

    FROM DUAL;

结果报错:ORA-14551: 无法在查询中执行 DML 操作。

经过一番查询,发现一个常识性错误,我的select算是一个查询语言,而函数体中存在操纵语言,DQL语言中无法执行DML语言,着实菜了一把。

后面把函数改为过程,直接在过程中调用,而不同select,解决了此问题。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值