我正在尝试将一行从我们的生产数据库复制到我自己的小型个人 Oracle Express 数据库以重现错误,因为我无法真正进入生产代码。不幸的是,这一行涉及将某种数据结构序列化为 blob
列类型的列,这是在 mock 规范化之神。这是插入
:
INSERT INTO TPM_VIEWS VALUES(
5,
'Test Repro View',
665,
1,
'0001000000ffffffff01000000000000000c020000003a44414c2c205... //About 7600 characters
);
我尝试在 Aqua Data Studio 10 中运行它,我得到:
ORA-01704: string literal too long
接下来我尝试将其粘贴到 SQL*Plus 中,这给了我:
SP2-0027: Input is too long (> 2499 characters) - line ignored
最后,我尝试将整个内容粘贴到 foo.sql 中并运行 @foo.sql
这给了我:
SQL> @c:\foo.sql
Input truncated to 7499 characters
SP2-0027: Input is too long (> 2499 characters) - line ignored
ERROR:
ORA-01756: quoted string not properly terminated
Oracle 专家的 super secret 方法是什么?不,我无权访问 Oracle 服务器本身,因此无法运行任何命令行备份或导出实用程序。谢谢!
更新:
我还尝试通过撒一些 ' || 来分割字符串。 '
是随机的,这给了我错误:
ORA-01489: result of string concatenation is too long
最佳答案
由于您可以访问生产数据库,因此最简单的解决方案可能是创建从本地 XE 数据库到生产数据库的数据库链接。
CREATE DATABASE LINK link_to_prod
CONNECT TO <<your user name in prod>>
IDENTIFIED BY <<your password in prod>>
USING <<TNS alias for prod database>>
然后,您可以将数据从 prod 复制到本地数据库
INSERT INTO tpm_views
SELECT <<list of columns including BLOB>>
FROM tpm_views@link_to_prod
WHERE <<some key>> = 5
关于sql - 在 Oracle 的插入语句中遇到字符串常量大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8856788/