甲骨文临时存储

Posted

技术标签:

【中文标题】甲骨文临时存储【英文标题】:Oracle temporary storage 【发布时间】:2014-06-10 23:14:15 【问题描述】:

我需要执行一个一次性脚本(即它不会部署在活系统中)来更正现有表中的某些值。

脚本本身不相关。这里的问题是“一些值”部分:要调整的数据(键和旧值和新值)是在电子表格中收集的。假设它有很多行,比如 4 或 5 列。

在 MSSQL Server 术语中,我将创建一个临时表来保存输入值,并在将电子表格导出为 CSV 后将它们全部输入(加上一些文本转换,可能使用 sed(1) 或 paste(1) unix shell 命令):

CREATE TABLE #inputdata (col1 AS INTEGER, col2 AS VARCHAR ...);

INSERT INTO #inputdata VALUES (...);
...
INSERT INTO #inputdata VALUES (...);

-- then comes the script which can SELECT FROM #inputdata
-- just like a normal table

我需要在 Oracle 中执行此操作。

Oracle 临时表似乎只是数据方面的临时表,我的意思是,它们在使用之前应该已经存在于数据库中。我没有,也永远不会拥有创建它的必要权限; SQLServer 允许创建临时表而不管普通的表创建权限。

有什么想法吗?

【问题讨论】:

你有什么特权?如果您没有创建对象的权限,那么使用临时表或外部表都会被淘汰。如果您无法获得在任何模式中创建任何类型对象的权限,您可能会使用 PL/SQL 集合,但是您需要做一些工作来根据文件中的数据初始化集合。 在 oracle 中,你有你的表类型的数组,等等。在 pl/sql 中有很多方法来存储临时数据。如果您对架构具有创建权限,则可以执行 create table xxx as select ....。 ss64.com/oraplsql/declaretbl.html 我拥有的唯一权限是 INSERT/SELECT/UPDATE/DELETE。没有别的了。 【参考方案1】:

我已经解决了 WITH 子句的问题:

WITH inputdata AS (
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    ...
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL
)
SELECT ...
FROM .... INNER JOIN inputdata ON ...
WHERE inputdata...

在我的脚本中,只涉及 SELECT 和 INSERT。

对于 INSERT,语法变为:

INSERT INTO tableX (...)
WITH inputdata AS (
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    ...
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL
)
SELECT ...
FROM .... INNER JOIN inputdata ON ...
WHERE inputdata...

【讨论】:

在我看来,这是一个可怕的解决方案,但确实有效。不知道 WITH 子句是否适用于 UPDATE 或 DELETE(对于 DELETE,我认为子查询可以解决所有情况;对于 UPDATE,当要更新的值来自输入表时,我想不出解决方案)。

以上是关于甲骨文临时存储的主要内容,如果未能解决你的问题,请参考以下文章

TikTok 美国用户数据或将由甲骨文存储,字节跳动无权访问

ORA-01722: 无效编号 当我尝试执行存储过程时。甲骨文错误

如何处理 for 循环中的异常以使用存储过程插入行?甲骨文 PLSQL

甲骨文和 GitLab

甲骨文 JSON 查询

传TikTok或将与甲骨文达成数据存储协议;苹果1.8米连接线卖949元;云原生日志系统Loggie正式开源|极客头条