В sql dev преобразование даты корректно, но когда я помещаю его в сценарий unix , преобразование даты отличается.
TO_CHAR(TO_DATE(MAX(DATE), 'DD-MON-YYYY HH24:MI:SS'), 'YYYY-MM-DD"T"HH24:MI:SS')
Ввод : 01-SEP-2018 21: 30: 05
Результат в sql dev :
2018-09-01T21: 30: 05
Результат в Unix-скрипте : 0018-09-01T00: 00: 00
РЕДАКТИРОВАТЬ: Другие детали
Ниже update_date.sh
в Unix. Это уже работает (временные таблицы удаляются / создаются со строками, которые мне нужны). Но содержит следующее: когда я пытаюсь конвертировать A.Date
(что является датой), результат неверен.
0018-09-01T00:00:00
. Год стал 0018
, а Время стало 00:00:00
.
#!/bin/sh
ACCOUNT=${APP_DB_USER}/${APP_DB_PASS}@${APP_DB_INST}
sqlplus -s $ACCOUNT << EOF > update_date.log
SET HEADING OFF;
WHENEVER SQLERROR CONTINUE;
SET ECHO ON;
SET SERVEROUTPUT ON SIZE 1000000;
SET TIME ON;
SET TIMING ON;
prompt TEMP TABLE: TMP_LOGS
DROP TABLE TMP_LOGS;
COMMIT;
CREATE TABLE "TMP_MISMATCH_DATE"
("ID" VARCHAR2(200 BYTE),
"VALUE" VARCHAR2(4000 BYTE),
"COMPLETED" DATE,
"REMARKS" VARCHAR2(4000 BYTE));
COMMIT;
prompt TEMP TABLE: TMP_MISMATCH_DATE
DROP TABLE TMP_MISMATCH_DATE;
COMMIT;
CREATE TABLE TMP_MISMATCH_DATE AS
SELECT /*+PARALLEL(A,8) PARALLEL(B,8) PARALLEL(C,8)*/
A.ID,
MAX(A.START_DATE),
TO_CHAR(TO_DATE(MAX(A.DATE), 'DD-MON-YYYY HH24:MI:SS'), 'YYYY-MM-DD"T"HH24:MI:SS') as FIN_DATE,
C.NAME,
C.VALUE
FROM TABLE1 A
INNER JOIN temp_table B ON A.ID=B.ID
INNER JOIN TABLE2 C ON A.ID=C.ID
WHERE
A.IND = 'N' AND A.STATUS = 'PR' AND
C.NAME='SomeName' AND C.EXP_DATE IS NULL
GROUP BY A.ID, C.NAME, C.VALUE;
COMMIT;
prompt UPDATE Value 'SomeName' IN TABLE2
DECLARE
CURSOR CUSTCUR IS
SELECT ID, START_DATE, FIN_DATE, NAME, VALUE
FROM TMP_MISMATCH_DATE
WHERE FIN_DATE IS NOT NULL;
BEGIN
FOR CURREC IN CUSTCUR LOOP
UPDATE TABLE2 agrprm
SET agrprm.VALUE = curRec.FIN_DATE,
agrprm.update_date = SYSDATE
WHERE
agrprm.ID = curRec.ID AND
agrprm.NAME = 'SomeName' AND
agrprm.EXP_DATE IS NULL
;
COMMIT;
INSERT INTO TMP_LOGS
VALUES( CURREC.ID,
CURREC.VALUES,
SYSDATE, 'NEW_VALUE');
COMMIT;
END LOOP;
COMMIT;
END;
/
EXIT;
EOF