我是新的oracle,我得到错误:ORA-02149当我写我的代码,然后我写我的代码与动态sql .请看看我的代码.现在是正确的吗?我的代码,我写的是:
DECLARE
INPAR_DATE VARCHAR2(30):=20211005 ;
maxlevel NUMBER;
var_partition VARCHAR2(100);
var_partition_name VARCHAR2(100);
var_execute_query varchar2(500);
BEGIN
----------------------------max_level
SELECT MAX(DEPTH) INTO maxlevel FROM PRAGG.tbl_ledger;
SELECT TO_CHAR(TO_DATE(inpar_date,'yyyymmdd'),'j') INTO var_partition FROM dual;
SELECT 'P'||var_partition INTO var_partition_name FROM dual;
-----------------------------------tajmiiii
--- FOR i IN reverse 0..maxlevel-1
-- LOOP
select
' INSERT /*+ parallel(auto) */
INTO pragg.tbl_ledger_branch
(
LEDGER_CODE,
NAME,
DEPTH,
PARENT_CODE,
CUR_BALANCE,
BALANCE,
REF_CUR_ID,
EFF_DATE,
REF_BRANCH,
number_date
)
(SELECT /*+ parallel(auto) */
b.ledger_code,
MAX(b.name) ,
i,
max(b.PARENT_CODE),
SUM(a.CUR_BALANCE),
SUM(a.BALANCE),
a.REF_CUR_ID,
max(TO_DATE(inpar_date,'YYYY-MM-DD')),
a.REF_BRANCH,
var_partition
FROM pragg.tbl_ledger_branch partition('||var_partition_name||') a,
PRAGG.tbl_ledger b
WHERE b.DEPTH = i
AND a.PARENT_CODE = b.ledger_code
GROUP BY a.REF_CUR_ID,
a.REF_BRANCH ,
b.ledger_code
)x;'
INTO
var_execute_query
FROM
dual;
COMMIT;
-- END LOOP;
EXECUTE IMMEDIATE 'BEGIN'
|| var_execute_query
|| ' END;';
DBMS_OUTPUT.PUT_LINE(var_execute_query);
COMMIT;
END ;
请看看我的代码。在你看来是好的吗?什么是最好的想法与使用这个动态SQL为这个解决这个写这个代码与动态SQL?
1条答案
按热度按时间uelo1irk1#
您的代码存在多个问题。
pragg.tbl_ledger_branch PARTITION FOR (DATE '2023-03-20')
*切勿在已经是
DATE
的值上使用TO_DATE(...)
INSERT
语句不返回任何内容。因此,您的SQL语句没有多大意义。;
结束。实际上你的代码根本不应该工作。