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