Tsql 全局临时表和批量收集

Tsql 全局临时表和批量收集,tsql,plsql,bulk-collect,Tsql,Plsql,Bulk Collect,我会向你解释我的问题。 我必须将t-sql脚本转换为pl/sql脚本。 t-sql中有我的代码: CREATE TABLE #temp_tb ( temp_row nvarchar(max)) if @@error <> 0 goto lbl_end DECLARE @bulk_cmd varchar(1000) set @bulk_cmd = 'BULK INSERT #temp_tb FROM ''c:\Communication\Test\MSG_IN\'+'$(nomfi

我会向你解释我的问题。 我必须将t-sql脚本转换为pl/sql脚本。 t-sql中有我的代码:

CREATE TABLE #temp_tb ( temp_row nvarchar(max)) 
if @@error <> 0 goto lbl_end

DECLARE @bulk_cmd varchar(1000)
set @bulk_cmd = 'BULK INSERT #temp_tb FROM ''c:\Communication\Test\MSG_IN\'+'$(nomfic)'+''' WITH 
( 
CODEPAGE = ''RAW'',
ROWTERMINATOR = '''+CHAR(10)+''',
DATAFILETYPE = ''WIDECHAR'' 
)'

exec (@bulk_cmd)
if @@error <> 0 goto lbl_end
但是,我这里有一个错误
NCHAR(MAX)
。我必须把一个大的值比如100000?如果我把这个放进去,他会在
EXECEPTION
语法错误之后给我一个错误

另一方面,如果有人能告诉我如何适应我批量收集。。。我找不到任何像我这样批量收集到集成文件的文档

我希望我很清楚,因为我真的很难解释。。。我是Oracle(PL/SQL)的初学者

再次感谢大家的帮助


编辑:我用.bat启动这个脚本。我取了参数,它用参数函数中的值填充了“$(nomfic)”。

检查此链接,确定“最大值”为2000。谢谢,对我的情况有什么想法吗?这里有很多错误。Oracle中的临时表与SQL Server的工作方式不同。您的脚本不应该创建全局临时表—您只需创建一次,然后在需要时重新使用它。而且,您的第一个匿名块没有任何作用。另外,
exec
不是有效的PL/SQL命令-要运行动态SQL,您可以使用
executeimmediate
,但这里不需要。您的“大容量插入”语句也无法工作。您拥有在Oracle中创建临时表的正确命令。“Oracle中的临时表是保存会话本地临时数据的[global]永久对象。”[Emphasis added]要从文件系统加载文件,可以使用外部表(推荐)或SQL Loader。大容量收集用于将数据加载到PL/SQL数组或从PL/SQL数组加载数据,与文件无关。请查看此链接,好的,这样我就知道“最大值”是2000。谢谢,对我的情况有什么想法吗?这里有很多错误。Oracle中的临时表与SQL Server的工作方式不同。您的脚本不应该创建全局临时表—您只需创建一次,然后在需要时重新使用它。而且,您的第一个匿名块没有任何作用。另外,
exec
不是有效的PL/SQL命令-要运行动态SQL,您可以使用
executeimmediate
,但这里不需要。您的“大容量插入”语句也无法工作。您拥有在Oracle中创建临时表的正确命令。“Oracle中的临时表是保存会话本地临时数据的[global]永久对象。”[Emphasis added]要从文件系统加载文件,可以使用外部表(推荐)或SQL Loader。大容量收集用于向PL/SQL数组加载数据或从中加载数据,与文件无关。
CREATE GLOBAL TEMPORARY TABLE temp_tb ( temp_row NCHAR(MAX)) ON COMMIT DELETE ROWS;
BEGIN
EXCEPTION
    WHEN OTHERS THEN GOTO lbl_end;
END;                               

DECLARE bulk_cmd varchar2(1000);

bulk_cmd := 'BULK INSERT temp_tb FROM ''c:\Communication\Test\MSG_IN\'+'$(nomfic)'+''' WITH 
( 
CODEPAGE = ''RAW'',
ROWTERMINATOR = '''+CHAR(10)+''',
DATAFILETYPE = ''WIDECHAR'' 
)';

BEGIN
  exec (bulk_cmd);
EXCEPTION
    WHEN OTHERS THEN GOTO lbl_end;
END;