我想将 table 的所有列数据以行的形式插入到另一个 table
I want to insert all columns data of an table in to another table in form of rows
-- 创建table
create table RADIOLOGY.TEST_DATA
(
EMP_ID VARCHAR2(100),
EMP_NAME VARCHAR2(500),
EMP_CONTACT_NO VARCHAR2(500),
EMP_ADDRESS VARCHAR2(500),
EMP_GENDER VARCHAR2(500)
);
table 数据格式为
1 JOHN 03000000 LONDON MALE
我希望输出为
EMP_ID 1
EMP_NAME JOHN
EMP_CONTACT_NO 03000000
EMP_ADDRESS LONDON
EMP_GENDER MALE
您可以使用 unpivot
将行数据转换为列数据:
select *
from test_data
unpivot include nulls
( val for col in (emp_id, emp_name, emp_contact_no, emp_address, emp_gender ) )
您的问题是:
I want to insert all columns data of an table in to another table in form of rows
这是什么意思?完全没有意义。原因如下:当我看到它时,我的第一个想法是 print_table
过程。我不记得原作者是谁(我不是);是问汤姆还是其他人,我真的不知道,对此我深表歉意。
这里是:
SQL> set serveroutput on
SQL> create or replace procedure print_table (p_query in varchar2)
2 authid current_user
3 is
4 l_thecursor integer default dbms_sql.open_cursor;
5 l_columnvalue varchar2 (4000);
6 l_status integer;
7 l_desctbl dbms_sql.desc_tab;
8 l_colcnt number;
9 begin
10 execute immediate 'alter session set
11 nls_date_format=''dd.mm.yyyy hh24:mi:ss'' ';
12
13 dbms_sql.parse (l_thecursor, p_query, dbms_sql.native);
14 dbms_sql.describe_columns (l_thecursor, l_colcnt, l_desctbl);
15
16 for i in 1 .. l_colcnt
17 loop
18 dbms_sql.define_column (l_thecursor,
19 i,
20 l_columnvalue,
21 4000);
22 end loop;
23
24 l_status := dbms_sql.execute (l_thecursor);
25
26 while (dbms_sql.fetch_rows (l_thecursor) > 0)
27 loop
28 for i in 1 .. l_colcnt
29 loop
30 dbms_sql.column_value (l_thecursor, i, l_columnvalue);
31 dbms_output.
32 put_line (
33 rpad (l_desctbl (i).col_name, 30) || ': ' || l_columnvalue);
34 end loop;
35
36 dbms_output.put_line ('-----------------');
37 end loop;
38
39 end;
40 /
Procedure created.
它有什么作用?以您想要的格式呈现数据:
SQL> exec print_table('select * from emp where deptno = 30');
EMPNO : 7499
ENAME : ALLEN
JOB : SALESMAN
MGR : 7698
HIREDATE : 20.02.1981 00:00:00
SAL : 1600
COMM : 300
DEPTNO : 30
-----------------
EMPNO : 7521
ENAME : WARD
JOB : SALESMAN
MGR : 7698
HIREDATE : 22.02.1981 00:00:00
SAL : 1250
COMM : 500
DEPTNO : 30
-----------------
EMPNO : 7654
ENAME : MARTIN
JOB : SALESMAN
MGR : 7698
HIREDATE : 28.09.1981 00:00:00
SAL : 1250
COMM : 1400
DEPTNO : 30
<snip>
现在,回到 "makes no sense":你打算如何将类似的东西插入另一个 table? "another table" 看起来怎么样?它是否有(最多)1000 列(is/was 的限制)所以例如每个员工将被插入一列?我从未见过这样的数据模型。你会如何使用它?呈现给最终用户?老实说,不知道,我一点也不喜欢。
如果我误解了问题,请解释。
-- 创建table
create table RADIOLOGY.TEST_DATA
(
EMP_ID VARCHAR2(100),
EMP_NAME VARCHAR2(500),
EMP_CONTACT_NO VARCHAR2(500),
EMP_ADDRESS VARCHAR2(500),
EMP_GENDER VARCHAR2(500)
);
table 数据格式为
1 JOHN 03000000 LONDON MALE
我希望输出为
EMP_ID 1
EMP_NAME JOHN
EMP_CONTACT_NO 03000000
EMP_ADDRESS LONDON
EMP_GENDER MALE
您可以使用 unpivot
将行数据转换为列数据:
select *
from test_data
unpivot include nulls
( val for col in (emp_id, emp_name, emp_contact_no, emp_address, emp_gender ) )
您的问题是:
I want to insert all columns data of an table in to another table in form of rows
这是什么意思?完全没有意义。原因如下:当我看到它时,我的第一个想法是 print_table
过程。我不记得原作者是谁(我不是);是问汤姆还是其他人,我真的不知道,对此我深表歉意。
这里是:
SQL> set serveroutput on
SQL> create or replace procedure print_table (p_query in varchar2)
2 authid current_user
3 is
4 l_thecursor integer default dbms_sql.open_cursor;
5 l_columnvalue varchar2 (4000);
6 l_status integer;
7 l_desctbl dbms_sql.desc_tab;
8 l_colcnt number;
9 begin
10 execute immediate 'alter session set
11 nls_date_format=''dd.mm.yyyy hh24:mi:ss'' ';
12
13 dbms_sql.parse (l_thecursor, p_query, dbms_sql.native);
14 dbms_sql.describe_columns (l_thecursor, l_colcnt, l_desctbl);
15
16 for i in 1 .. l_colcnt
17 loop
18 dbms_sql.define_column (l_thecursor,
19 i,
20 l_columnvalue,
21 4000);
22 end loop;
23
24 l_status := dbms_sql.execute (l_thecursor);
25
26 while (dbms_sql.fetch_rows (l_thecursor) > 0)
27 loop
28 for i in 1 .. l_colcnt
29 loop
30 dbms_sql.column_value (l_thecursor, i, l_columnvalue);
31 dbms_output.
32 put_line (
33 rpad (l_desctbl (i).col_name, 30) || ': ' || l_columnvalue);
34 end loop;
35
36 dbms_output.put_line ('-----------------');
37 end loop;
38
39 end;
40 /
Procedure created.
它有什么作用?以您想要的格式呈现数据:
SQL> exec print_table('select * from emp where deptno = 30');
EMPNO : 7499
ENAME : ALLEN
JOB : SALESMAN
MGR : 7698
HIREDATE : 20.02.1981 00:00:00
SAL : 1600
COMM : 300
DEPTNO : 30
-----------------
EMPNO : 7521
ENAME : WARD
JOB : SALESMAN
MGR : 7698
HIREDATE : 22.02.1981 00:00:00
SAL : 1250
COMM : 500
DEPTNO : 30
-----------------
EMPNO : 7654
ENAME : MARTIN
JOB : SALESMAN
MGR : 7698
HIREDATE : 28.09.1981 00:00:00
SAL : 1250
COMM : 1400
DEPTNO : 30
<snip>
现在,回到 "makes no sense":你打算如何将类似的东西插入另一个 table? "another table" 看起来怎么样?它是否有(最多)1000 列(is/was 的限制)所以例如每个员工将被插入一列?我从未见过这样的数据模型。你会如何使用它?呈现给最终用户?老实说,不知道,我一点也不喜欢。
如果我误解了问题,请解释。