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