Oracle相关文档,希望互相学习,共同进步
风123456789~-CSDN博客
1.背景
最近同事反馈了一个很奇怪的问题,即有一个函数,入参是当前年月,主要作用是通过SQL语句将不合规的数据插入到指定表中,插入数据时带上入参的年月参数。当前问题:单独测试SQL没有问题可以执行成功,但是将SQL放在函数中 拼接年月参数后,报错提示如下:
报错:ORA-00979: not a GROUP BY expression
2. 实验验证
本文准备测试表、测试函数进行还原 验证,并进行处理。
2.1 准备表
create table FENG_CHECK_LOG
(kid NUMBER generated always as identity (maxvalue 999999999 cycle order),data_issue VARCHAR2(7),val_time DATE,year_month VARCHAR2(7),remark VARCHAR2(400),validate_flag VARCHAR2(1)
)
-- Create table
create table TBL_DAYEND_LOG
(logid NUMBER generated always as identity (start with 10733 maxvalue 9999999999999 cycle order),function_name VARCHAR2(200),table_name VARCHAR2(200),data_issue VARCHAR2(7),logtime DATE,type VARCHAR2(50),message VARCHAR2(4000)
);
-- Add comments to the table
comment on table TBL_DAYEND_LOGis '日终日志表';
-- Add comments to the columns
comment on column TBL_DAYEND_LOG.logidis '日志id';
comment on column TBL_DAYEND_LOG.function_nameis '过程名称';
comment on column TBL_DAYEND_LOG.table_nameis '处理表名称';
comment on column TBL_DAYEND_LOG.data_issueis '期次';
comment on column TBL_DAYEND_LOG.logtimeis '执行时间';
comment on column TBL_DAYEND_LOG.typeis '0成功 1失败 3异常 9其他';
comment on column TBL_DAYEND_LOG.messageis '日志信息';
2.2 准备函数
函数一:
CREATE OR REPLACE FUNCTION GET_TEST(pDataIssue in varchar2) return varchar2 isvResult varchar2(10);vFunctionName varchar2(1000);vTableName varchar2(1000);vMsg varchar2(1000);vSql varchar2(1000);BEGINvResult := '0';vFunctionName := 'GET_TEST-插入日志表';vTableName := 'FENG_CHECK_LOG';BEGINGET_LOGGER(pDataIssue, vFunctionName, vTableName, '0', '开始跑批');INSERT INTO FENG_CHECK_LOG(DATA_ISSUE,VAL_TIME