Oracle相关文档,希望互相学习,共同进步
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_LOG
is '日终日志表';
-- Add comments to the columns
comment on column TBL_DAYEND_LOG.logid
is '日志id';
comment on column TBL_DAYEND_LOG.function_name
is '过程名称';
comment on column TBL_DAYEND_LOG.table_name
is '处理表名称';
comment on column TBL_DAYEND_LOG.data_issue
is '期次';
comment on column TBL_DAYEND_LOG.logtime
is '执行时间';
comment on column TBL_DAYEND_LOG.type
is '0成功 1失败 3异常 9其他';
comment on column TBL_DAYEND_LOG.message
is '日志信息';
2.2 准备函数
函数一:
CREATE OR REPLACE FUNCTION GET_TEST(pDataIssue in varchar2) return varchar2 is
vResult varchar2(10);
vFunctionName varchar2(1000);
vTableName varchar2(1000);
vMsg varchar2(1000);
vSql varchar2(1000);
BEGIN
vResult := '0';
vFunctionName := 'GET_TEST-插入日志表';
vTableName := 'FENG_CHECK_LOG';
BEGIN
GET_LOGGER(pDataIssue, vFunctionName, vTableName, '0', '开始跑批');
INSERT INTO FENG_CHECK_LOG(DATA_ISSUE,
VAL_TIME