如何为仅具有受限访问权限的用户获取Oracle数据库的DDL

任何人都可以帮助我解决导致字符串连接时间过长的ORA-01489问题。 我正在尝试从Oracle数据库针对Impala创建DDL脚本,并使用listAGG来获取数据列及其dataType,这是我面临的串联问题。
由于我是Oracle的新手,因此我一直致力于解决由于ListAGG和查询中的大量串联操作导致的问题,因此欢迎使用任何优化的查询。 Oracle版本:Oracle数据库11g企业版。 以下是我正在使用的查询:

`

WITH Meta AS (
SELECT
        t.table_name,t.column_name  AS columnName,t.data_type AS DataType,t.DATA_LENGTH AS DataLENGTH,CASE WHEN t.DATA_Precision < 10 AND t.DATA_SCALE = 0 THEN 'INT'
        WHEN t.DATA_Precision < 19 AND t.DATA_SCALE = 0 THEN 'BIGINT'
        WHEN t.DATA_Precision > 19 AND t.DATA_SCALE > 0 THEN 'DECIMAL( ' || t.DATA_SCALE || t.DATA_Precision || ')'
        ELSE NULL END  AS DataPrecision,uc.constraint_type AS ConstraintSymbol,t.NULLABLE AS Constraint_Text,t.column_ID as COL_ID
FROM all_tab_columns t
LEFT JOIN all_cons_columns cc
ON (cc.table_name = t.table_name AND
    cc.column_name = t.column_name)
LEFT JOIN all_constraints uc
ON (t.table_name = uc.table_name AND
   uc.constraint_name = cc.constraint_name )
WHERE t.table_name = '$table' and t.owner='$schema'
ORDER BY t.column_ID
)
SELECT 
 'USE $$"DATABASE"' || chr(10)
  ||'CREATE EXTERNAL TABLE IF NOT EXISTS '  
  || table_name || chr(10)
  || '(' || chr(10)
  || TO_CLOB(ListAGG(columnName || ' ' || 
  TO_CLOB(ListAGG(columnName || ' ' || 
  -- IMPALA CONVERSIONS
  CASE WHEN DataType IN ('CHAR','NCHAR') THEN 'CHAR'
  WHEN DataType IN ('VARCHAR','NVARCHAR','VARCHAR2','NVARCHAR2') THEN 'VARCHAR'
  WHEN DataType IN ('DATE','DATETIME','DATETIME2','TIME') THEN 'TIMESTAMP'
  WHEN DataType = 'BINARY_DOUBLE' THEN 'DOUBLE'
  WHEN DataType = 'BINARY_FLOAT' THEN 'FLOAT'
  WHEN DataType IN ('BIT','BINARY','BLOB','CLOB','ROWID','UROWID','NCLOB','UNIQUEIDENTIFIER','INTERVALYM','INTERVALDS','LONG') THEN 'STRING'
  WHEN DataType = 'NUMber' THEN DataPrecision
  ELSE 'UNKNOWN' END
  || CASE WHEN DataType NOT LIKE '%NUMber%' THEN  '(' || TO_CHAR(DataLENGTH) || ')' END
  || CASE WHEN Constraint_Text like '%N%' THEN ' COMMENT "<source value>:not-nullable"' 
  WHEN Constraint_Text like '%Y%' THEN  ' COMMENT "<source value>:not-nullable"' END || ' '
  || CASE 
  WHEN ConstraintSymbol like '%P%' THEN ' COMMENT "<source value>:not-nullable|PK"' 
  WHEN ConstraintSymbol like '%U%' THEN ' COMMENT "<source value>:not-nullable|UNIQUE"' END || chr(10),',' ) 
  WITHIN GROUP (ORDER BY COL_ID)) 
 FROM Meta
GROUP BY table_name

`

footballfl1987 回答:如何为仅具有受限访问权限的用户获取Oracle数据库的DDL

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3022506.html

大家都在问