当前位置: 首页 > 知识库问答 >
问题:

SP2-1504:无法打印未初始化的LOB变量

邵宏达
2023-03-14

我正在尝试设置DBMS\U元数据的输出。将\u DDL获取到SQLPlus中的myRET\u VARbind变量。

我尝试了以下脚本。sql:

set pagesize 0
SET LONG 9999999
VARIABLE ret_val CLOB
VARIABLE lengthRet NUMBER

select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') into :ret_val from dual;

spool testClean.sql

print :ret_val;

spool off
/ -- I had to add this line because the script would never run otherwise

但我得到:

SP2-1504:无法打印未初始化的LOB变量“RET\u VAL”

我还尝试用一个BEGIN/END块来围绕RET\u VAL的赋值:

set pagesize 0
SET LONG 9999999
VARIABLE ret_val CLOB
VARIABLE lengthRet NUMBER

BEGIN
select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') into :ret_val from dual;
END;

spool testClean.sql

print :ret_val;
spool off
/

但是,当我尝试在SQLPlus中运行它时,会出现以下错误:

第5行的错误:ORA-06550:第5行,第1列:PLS-00103:遇到符号“SPOOL”

如何分配DBMS\U元数据的输出。将DDL获取到我的RET VAR?

共有1个答案

丁曦
2023-03-14

在您发布的第一个代码中,您尝试在简单的SQL中使用select... to模式,但它仅在PL/SQL上下文中这样工作。因此,使用块填充绑定变量是正确的。

正如@JanisBaiza所说,在匿名块之后需要一个/;但不是在脚本末尾:

set pagesize 0
SET LONG 9999999
VARIABLE ret_val CLOB

BEGIN
  select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') into :ret_val from dual;
END;
/

您可以直接调用该函数,只需使用select。。。从dual开始:

BEGIN
  :ret_val := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE');
END;
/

或者您可以使用执行单行匿名块的简写:

exec :ret_val := DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE');

不清楚为什么要为此使用bind变量,因为您可以从普通SQL调用函数(不使用子句!):

set pagesize 0
SET LONG 9999999

spool testClean.sql
select DBMS_METADATA.GET_DDL('TABLE', 'MY_TABLE') from dual;
spool off

 类似资料:
  • 本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的

  • 我在这里看到过类似的问题,如果这看起来像是重复的,我很抱歉,但是类似问题的答案对我没有帮助。所以我有一个方法,它是类的一部分。这里是: 错误表明变量min可能尚未初始化。我不明白这怎么可能是真的。我觉得变量不可能不在for循环之外初始化。请帮忙。谢谢

  • 问题真的很简单,为什么这段代码不能工作: G++给出了以下错误: ./test.cpp:在函数“int main(int,char**)”中:./test.cpp:4:13:错误:未初始化的const“a”[-Fpermissive]const int a,b=std::tie(std::make_pair(1,2));^./test.cpp:4:42: 错误:无法将“std::pair&”类型的

  • 我有以下Java代码: 但是,当我运行它时,它会抛出以下错误: 我在do之前初始化了变量。while 循环,并在 try. 中设置值。捕获循环。似乎尚未设置该变量。抱歉,如果这是一个相当基本的问题,但我似乎无法弄清楚。

  • 为什么打印(或其他一些随机数)?什么是 printing?为什么它不是 (或 )?