ORACLE存储过程创建临时表并插入数据。

create or replace procedure test_proc
as
begin
execute immediate '
create global temporary table T_AB(
id_ number,
name_ varchar2(20),
num_ number)
as
select
A.id_,
A.name_,
B.num_
from
T_A A,
T_B B
where
A.id_=B.id_';
end;
报错是:
ORA-01773: 此 CERATE TABLE 中没有指定列的数据类型
ORA-06512: 在 "U_ORACLE.TEST_PROC", line 4
ORA-06512: 在 line 2
哪位大神给解决下?
在线等。。。

存储过程创建表后,在编译阶段数据库中并没有该表。这时向表中插入数据,会提示表不存在。所以,插入语句要赋值到变量里,通过e来执行。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-25
你这个语法是不对的
你create table as select 的时候是不能指定列的数据类型,因为你是根据查询结果创建一个表,列名和数据类型都是由查询结果定的,或者你可以
create table
然后
insert into table select ...
改成下面这样
create or replace procedure test_proc
as
begin
execute immediate '
create global temporary table T_AB as
select
A.id_,
A.name_,
B.num_
from
T_A A,
T_B B
where
A.id_=B.id_';
end;本回答被提问者采纳

oracle 怎么在存储过程中创建一个临时表,在里面插入数据,再查找这个临 ...
一般没必要创建临时表,处理数据后又它drop。存储过程中要用到的表应该会经常用到。就让它存在吧,用完用 truncate table 清理数据就可以了。空表不会占很多资源。 我们就是这样做的。

select保存到存储过程建临时表
临时表的列1,列2,列3和表的列1,列2,列3可以不同,但必须要匹配。

oracle怎么用命令向建好的表中插入一列并使它成为第一列?请说详细点...
2》写一个存储过程 CREATE OR REPLACE PROCEDURE INS IS BEGIN FOR I IN 1 .. 200 LOOP INSERT INTO T (COL2) VALUES (I);END LOOP;COMMIT;END;编译并运行该过程,插入列即完成。下面将COL2列调整为第一列:方法一:借用临时表,建temp表与t表的表结构、数据完全一致,重建t表,调整字段顺...

oracle存储过程 游标 比对临时表和业务表 相同数据找出来 做标记 在插 ...
临时表的,要用两条搜索语句,而且是循环执行的。 ;然而,游标的只用一条搜索语句,没有循环执行的循环语句

怎么样在存储过程中声明一个临时表,然后在从另一张表中查询数据后依次插...
用全局临时表 create procedure P as if object_id('Tempdb..##') is not null drop table create table ##(ID int)go exec p insert ## select 1 select * from

怎样在oracle数据库里面建立一张临时表,保存一条或者多条数据,在这条...
) on commit delete rows 这是建立临时表的语句,但是不建议使用,虽然只是占用临时表空间,但是在程序里不好跟踪调错,而且在在存储过程中应用,无法跟踪数据,还需将存储过程中用到临时表的地方复制出来运行,我感觉在编程的过程中有诸多不便,建议使用table,在使用完了可以做truncate操作把表清空,如果...

sql server如何用存储过程把多个表的数据添加到一张表中,表字段都很...
然后字段是哪些 如果表名不变 字段类似的话 我帮你写个模型 create proc usp_tableall as insert into 表名 --这里表要存在 存储你处理的数据 否则就用select * into from tb 的格式 select col1,col2 from a union all select col1,col2 from b ……go exec usp_tableall ...

如何把存储过程查询出来的结果放到一个临时表里面
有两种方式(环境MSSQL)1 先把临时表创建好,用insert into #tmp exec myProc 2 不建临时表,用openrowset select * into # from openrowset('SQLOLEDB','AVAST';'sa';'lichao','exec Northwind..myProc')--存储过程钱加上数据库名

oracle存储过程 使用游标 比对临时表和业务表两张表 相同数据找出来 做...
使用merge into就可以了。示例 MERGE INTO bonuses D USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id)WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01 DELETE WHERE (S.salary > 8000)W...

SQL 存储过程里能用中间表或者临时表吗?
一 建一个临时表就是了 1. 存储过程中 create table #Temp(……) ,然后Insert 数据 2. 存储过程中 select * into #Temp from ……这两种模式都可以形成一个当前会话可见的临时表,如果需要建全局可见的就使用##。操作起来跟普通表一样。二 SELECT CONVERT(varchar(10), GETDATE(), 111) ...

相似回答