oracle 我得到错误:ORA-02149当我使用分区表

bxjv4tth  于 2023-04-05  发布在  Oracle
关注(0)|答案(1)|浏览(248)

我是新的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?

uelo1irk

uelo1irk1#

您的代码存在多个问题。

  • 不要使用(硬编码的)分区名。如果你真的需要指定分区-我对此表示怀疑-那么你也可以通过值指定分区,例如pragg.tbl_ledger_branch PARTITION FOR (DATE '2023-03-20')
    *切勿在已经是DATE的值上使用TO_DATE(...)
  • INSERT语句不返回任何内容。因此,您的SQL语句没有多大意义。
  • 一个动态SQL字符串不能以分号;结束。实际上你的代码根本不应该工作。

相关问题