Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Oracle SQL查询格式化为输出为';创建表语句';?_Oracle_Stored Procedures - Fatal编程技术网

如何将Oracle SQL查询格式化为输出为';创建表语句';?

如何将Oracle SQL查询格式化为输出为';创建表语句';?,oracle,stored-procedures,Oracle,Stored Procedures,好的,我正在尝试创建一个批处理文件,它运行一个“编译”Oracle SQL文件。“Compile”文件将有2个过程,其中一个将从我的模式中提取表,另一个将提取该表中的列。然后,我将从批处理文件(称为“run”)中运行另一个Oracle SQL文件,该文件将运行过程并创建Oracle SQL类型的输出文件。此输出SQL文件必须正确格式化,因为它是报表。我创建了批处理文件,还创建了两个显示表和列的过程。但到目前为止,我还没有幸运地创建“RUN”文件,使输出与提供的图像匹配 下面是编译文件中2个过程的

好的,我正在尝试创建一个批处理文件,它运行一个“编译”Oracle SQL文件。“Compile”文件将有2个过程,其中一个将从我的模式中提取表,另一个将提取该表中的列。然后,我将从批处理文件(称为“run”)中运行另一个Oracle SQL文件,该文件将运行过程并创建Oracle SQL类型的输出文件。此输出SQL文件必须正确格式化,因为它是报表。我创建了批处理文件,还创建了两个显示表和列的过程。但到目前为止,我还没有幸运地创建“RUN”文件,使输出与提供的图像匹配

下面是编译文件中2个过程的代码

DROP PROCEDURE Extract_Columns;

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE Extract_Tables
AS
BEGIN
    
    FOR CurrentRow IN(
    SELECT TABLE_NAME
    FROM USER_TABLES)
    LOOP
    DBMS_OUTPUT.PUT_LINE(CurrentRow.table_name || ', ' );
    extract_columns(CurrentRow.table_name);
    END LOOP;
END;
/
Show ERRORS;

EXEC extract_tables;

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE Extract_Columns(
    iTable IN USER_TABLES.table_name%TYPE
)
AS
BEGIN
    
    FOR CurrentRow IN ( SELECT COLUMN_NAME
        FROM USER_TAB_COLUMNS
        WHERE TABLE_NAME = iTable)
    LOOP
        DBMS_OUTPUT.PUT_LINE(CurrentRow.Column_Name || ', ' );
        END LOOP;
END;
/

EXEC extract_columns;
这是上述程序的输出

CUSTOMERS, 
CUSTNUM, 
COMPANY, 
CUSTREP, 
CREDITLIMIT, 
SALESREPS, 
SALESREP, 
NAME, 
AGE, 
REPOFFICE, 
TITLE, 
HIREDATE, 
MANAGER, 
QUOTA, 
SALES, 
OFFICES, 
OFFICE, 
CITY, 
REGION, 
MGR, 
TARGET, 
SALES, 
ORDERS, 
ORDERNUM, 
ORDERDATE, 
CUST, 
REP, 
MFR, 
PRODUCT, 
QTY, 
AMOUNT, 
PRODUCTS, 
MFR, 
PRODUCT, 
DESCRIPTION, 
PRICE, 
QTYONHAND, 

上述输出中的客户、办公室、订单、产品、销售代表是表,每个表后面的行是各自的列。我只想把上面的输出转换成给定的图片。我应该如何实现这一点呢?

从Oracle开始:我认为您并不打算在任何地方运行生成的“脚本”,因为它不会工作;你知道的,对吧?没有数据类型、精度、比例、大小、约束。。。如果需要,请调查
DBMS\u元数据。获取\u DDL

至于你的脚本:看看这是否有帮助;我只提取了两个表(例如)及其列

SQL> set serveroutput on;
SQL> declare
  2    l_crt varchar2(32000);
  3  begin
  4    for cur_t in (select table_name
  5                  from user_tables
  6                  where table_name in ('EMP', 'DEPT')
  7                 )
  8    loop
  9      l_crt := 'create table ' || cur_t.table_name ||' (';
 10
 11      for cur_c in (select c.column_name
 12                    from user_tab_columns c
 13                    where c.table_name = cur_t.table_name
 14                    order by c.column_id
 15                   )
 16      loop
 17        l_crt := l_crt || chr(10) || cur_c.column_name ||',';
 18      end loop;
 19
 20        l_crt := rtrim(l_crt, ',') || ');';
 21        dbms_output.put_line(l_crt || chr(10) || '--' );
 22        l_crt := null;
 23    end loop;
 24  end;
 25  /
create table DEPT (
DEPTNO,
DNAME,
LOC);
--
create table EMP (
EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO);
--

PL/SQL procedure successfully completed.

SQL>