在oracle SP中用更大的数据类型替换varchar2

2023-11-29

我使用的是oracle版本10。 PL/SQL 中有使用 varchar2 变量的存储过程。 该代码不断附加 varchar2 变量。 当 varchar2 变量大小超过 32767 时,它无法附加任何更多值。 现在我想将数据类型更改为long或clob(为了容纳更多字符),它不起作用。 如何修改这里的代码以具有与 clob 或 long 相同的附加功能?

样本附加 x:= x || '我的数据';


The long数据类型已弃用;如果可以的话你应该认真考虑迁移你的long列到一个clob.

如果您正在与clob你可以追加超过 32kvarchar2像这样限制:

declare
  l_clob clob;
begin
  dbms_lob.createtemporary(l_clob, true);
  dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
  dbms_lob.writeappend(l_clob, 4, '1234');
  for i in 1..10000 loop
    dbms_lob.writeappend(l_clob, 5, '.5678');
  end loop;
  dbms_output.put_line('CLOB length: ' || length(l_clob));
  dbms_lob.close(l_clob);
  dbms_lob.freetemporary(l_clob);    end;
/

CLOB length: 50004

您可以附加到long与连接运算符||,但正如您已经看到的,最多只有 32k。没有简单的方法可以处理longPL/SQL 中的值高于此值。你也许可以做一些事情dbms_sql但如果有可能将表列切换为clob.


如果您想将 clob 传递回调用者,并且它是一个临时 clob,则必须由调用者定义它并在创建后将其传递:

create or replace procedure proc1 as
  l_clob clob;
begin
  dbms_lob.createtemporary(l_clob, true);

  proc2(l_clob);
  dbms_output.put_line('proc1 CLOB length: ' || length(l_clob));

  dbms_lob.freetemporary(l_clob);
end;
/

create or replace procedure proc2(p_clob in out clob) as
begin
  dbms_lob.open(p_clob, dbms_lob.lob_readwrite);
  dbms_lob.writeappend(p_clob, 5, '12345');
  for i in 1..9999 loop
    dbms_lob.writeappend(p_clob, 5, '.56789');
  end loop;
  dbms_output.put_line('proc2 CLOB length: ' || length(p_clob));
  dbms_lob.close(p_clob);
end;
/

exec procs;

proc2 CLOB length: 50000
proc1 CLOB length: 50000

否则,对于调用者而言,该对象将不存在。

If the clob存在 - 从表中选择,例如,所以你不需要createtemporary调用 - 然后你可以将它分配给out参数,但我认为您所描述的情况并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在oracle SP中用更大的数据类型替换varchar2 的相关文章

随机推荐

  • 如何让垂直渐变背景在所有浏览器中工作?

    如果您要获得从白色到某种灰色的垂直渐变背景 您会怎么做 你可以用CSS来做 看看这个链接 它使用了优秀浏览器中的 CSS3 属性以及 IE 的特性filter使用 IE 时的属性 CSS gradient background FFFFFF
  • 运行存储过程的随机超时 - 删除重新创建修复

    因此 我在一个已有 10 年历史的系统上使用一个较大的数据库 30 gig sql 2005 和 net 3 5 Web 前端 它有新的和旧的位 我们遇到一个越来越频繁发生的问题 一个存储过程 到目前为止我们已经有 4 个不同的存储过程 决
  • 在 ClearCase 中隐藏元素

    我试图隐藏 ClearCase 视图中的一个元素 我在配置规范中设置了以下行 element path to some element none 在我的配置规范的更下方 包含另一个配置规范 反过来又包含其他配置规范等等 完全混乱 但我无法更
  • 对动作侦听器进行编程的常用方法是什么?

    我刚刚开始学习如何使用动作监听器 据我了解 它的工作原理如下 有一些类默认包含 addActionListener 方法 例如按钮类 使用此方法 我们向对象添加一个动作侦听器 例如 listenedObject addActionListe
  • 连接中出现未知的 SSL 协议错误

    我想将我的提交推送到 Bitbucket 存储库 但发生了此错误 Fatal unable to access https email protected myUsername myRepository git Unknown SSL pr
  • !in_array 在 PHP 中的使用 - 条件语句

    我想看看如何使用 in array 我有这段代码 但它不起作用 while row mysql fetch assoc result if in array row item output output row print json enc
  • WPF:选择组合框的可编辑文本框中的所有文本并将焦点设置为

    我有一个WPFComboBox其中有它的IsEditable属性绑定到视图模型 可以打开和关闭它 当它打开时 我想将焦点放在ComboBox并选择编辑中的所有文本TextBox 我看不出实现这一目标的最佳方法 我应该更换ControlTem
  • Python 正则表达式中的反斜杠转义序列和单词边界

    目前使用re sub re escape andrew SUB stringVar 预期行为 stringVar andrew re sub re escape andrew SUB stringVar Returns SUB 意外行为 s
  • 从 iPhone 发送帖子数据

    我想从 iPhone 发送帖子数据 我必须发送一本包含 8 个 k v 对的字典 K V 对 从 Iphone 发布所有这 8 个 K V 对的最佳方式是什么 我希望我应该在 URL 中仅传递 Id K V 对之一 其余的 K V 对应该通
  • 下标超出范围运行时错误9

    我正在创建一个函数 该函数从两个 Excel 文件中读取列标题 然后将这些列标题放入复选框中 以便用户可以检查他将使用哪些列 当我使用一个文件执行此操作时它可以工作 但是当我修改它以使用两个文件时 我收到 运行时错误 9 下标超出范围 并突
  • 如何从变量中的 id 获取 unicode 字符?

    我正在尝试生成一个包含每个 Unicode 变量的文件 我已经能够将 unicode 提高到 U FFFF 但是我需要将其提高到 U 231F4 我尝试过寻找答案 但是当符号 id 位于变量中而不是仅仅键入时 它们都不起作用 现在 我有这个
  • 如何从weblogic中jms模块的资源摘要表中获取jms队列列表?

    我需要打印 jms 模块的 jms 队列列表 我使用此代码来查找所需的队列并获取参数 但如何获取所有队列的名称并打印它们 Properties env new Properties env put Context PROVIDER URL
  • 使用 .htaccess 和 mod_rewrite 强制使用 SSL/https

    如何使用 PHP 中特定的 htaccess 和 mod rewrite 页面强制使用 SSL https 对于 Apache 您可以使用mod ssl强制使用 SSLSSLRequireSSL Directive 除非为当前连接启用了基于
  • 使用未分配的局部变量?

    Visual Studio 一直说Use of unassigned variable for iVal and iNumber 谁能告诉我哪里错了 这是一段代码 要求用户不断输入整数并将它们相加 直到用户想要停止为止 然后整数的总和显示在
  • 如何在使用 UI 生成器创建的渲染器中添加动态数据?

    如何在使用 UI 生成器创建的渲染器中添加动态数据 从 ui 构建器创建渲染并使用动态数据填充列表 protected boolean initListModelList List cmp cmp setModel new com code
  • itext - 添加无边框的 png 图像

    我想将以下 png 图像添加到我的 pdf 中 我使用以下代码来做到这一点 Image img PngImage getImage filename img setBorder Image NO BORDER img setAlignmen
  • Python3.5 和 FF48 的 Selenium WebDriver 出现“无法加载配置文件”错误

    我正在尝试将 Selenium 与 Python 一起使用 因此 我编写了以下代码并保存为名为的文件test py在工作目录中 用户 ykt68 seleniumwork ykt68 macbp15 seleniumwork pwd Use
  • Flutter for Linux 构建失败

    任何启用了 Linux 的 Flutter 应用程序的 Linux 构建都会导致以下错误 flutter run d linux Launching lib main dart on Linux in debug mode snap flu
  • 在 Windows 上安装 Tensorflow 错误

    Tensorflow 现已在 Windows 上可用 https developers googleblog com 2016 11 tensorflow 0 12 adds support for windows html 我使用pip安
  • 在oracle SP中用更大的数据类型替换varchar2

    我使用的是oracle版本10 PL SQL 中有使用 varchar2 变量的存储过程 该代码不断附加 varchar2 变量 当 varchar2 变量大小超过 32767 时 它无法附加任何更多值 现在我想将数据类型更改为long或c