在阅读 Joan Casteel 的 Oracle 11g Sql 时,作者提到关系数据库中不存在多对多关系。我想知道这个事实背后的原因是什么。
我正在尝试将转储文件从 11g 数据库导入 19c 数据库实例。我按照 Oracle 的建议以 SYSTEM 身份运行该作业。这项工作开始了,但很快就变成了失败的 SQL 错误,这些错误都有相同的:
ORA-54002: only pure functions can be specified in a virtual column expression.
我对该错误进行了一些研究,并发现一些迹象表明这是在 Oracle 12 之后解决的问题或错误。以下博客解决了该问题:
从 Oracle 12.2 开始,正则表达式函数被认为是非确定性的
...并讨论了一种涉及重新编码 SQL 的解决方法。
我正在从转储中创建一个 DDL 文件,以便为我提供所有可以使用的代码。
我的问题是:
- 是否有替代方法可以重写转储文件中的所有代码并针对 impdp 作业运行该代码?
- 这还有可能吗?
- 是否有其他选项可以从 11g 实例创建新的转储文件,该文件可以与 impdp 一起使用到 19c?
表详细信息:
CREATE TABLE Test2 (
ID INT,
Value INT,
other INT);
CREATE TABLE Test1 (
ID INT,
TYPE INT,
other INT);
INSERT INTO Test2 VALUES (123456, 5, 12);
INSERT INTO Test1 VALUES (123456, 00, 2);
INSERT INTO Test1 VALUES (123456, 01, 6);
INSERT INTO Test1 VALUES (123456, 02, 4);
INSERT INTO Test1 VALUES (987654, 00, 7);
INSERT INTO Test1 VALUES (987654, 01, 8);
INSERT INTO Test1 VALUES (456789, 00, 6);
INSERT INTO Test1 VALUES (456789, 01, 16);
这是我用来避免表测试重复的查询
SELECT DISTINCT t1.ID, t1.TYPE, t1.other, t2.value
FROM Test1 t1 INNER JOIN Test2 t2 ON t1.ID = t2.ID
GROUP BY t1.ID, t1.TYPE, t1.other, t2.value
ORDER BY t1.ID ASC;
查询结果:
ID TYPE other value
123456 0 2 5
123456 1 6 5
123456 2 4 5
描述:
预期结果是,当我从表中获取匹配记录时。应该从左表(Test1)中获取所有记录,并避免从右表(Test2)中重复记录。
预期的查询结果是,
ID TYPE other value
123456 0 2 5
123456 1 6
123456 2 4
SQL小提琴链接
http://sqlfiddle.com/#!9/8953fc/29
Criteria 当有 ID 匹配时,应该从左表(Test1)和右表(Test2)中获取所有匹配的记录,应该得到不同的记录。
我试图获取所有具有重复数据的记录并通过输入序列号来更新它。
假设我有这些数据:
+-------------------------------------------+
| first_name | last_name | sequence_number |
+-------------------------------------------+
| John | Smith | NULL |
| John | Smith | NULL |
| Jane | Doe | NULL |
| Jane | Doe | NULL |
| Jane | Doe | NULL |
| Rock | Lee | NULL |
+-------------------------------------------+
我的预期输出是这样的:
+-------------------------------------------+
| first_name | last_name | sequence_number |
+-------------------------------------------+
| John | Smith | 1 |
| John | Smith | 2 |
| Jane | Doe | 1 |
| Jane | Doe | 2 |
| Jane | Doe | 3 |
| Rock | Lee | NULL |
+-------------------------------------------+
我在使用以下输出、模式名称、大小和创建日期进行查询时遇到问题。我是 Oracle 的新手,经过 4 个多小时的搜索,我决定在这里创建一个问题。
我发现以下返回名称和大小的查询。
select owner, sum(bytes)/1024/1024 Size_MB from dba_segments
group by owner;
ORACLE SQL 手册(主要 11.1 SQL 手册的第 2-58 页)指出:
日期时间格式模型的总长度不能超过 22 个字符。
但是,我已经能够为 TO_CHAR 使用具有更多字符的格式字符串,几乎所有字符都是文本“文字”。
这安全吗(ORACLE 11)?(也许限制不包括非日期文字?)
例如:
SELECT TO_CHAR(sysdate,
'"SOMESTRING_"YYYYMMDD"_SOME LOTS MORE STRINGS OF A FILENAME PREFIX"')
FROM DUAL;
结果:
SOMESTRING_20200226_SOME LOTS MORE STRINGS OF A FILENAME PREFIX
它也适用于表格中的日期。
我想这样做的原因是在数据库列中构建一个文件名模板;否则我需要将日期格式放在单独的字段中。
PS请告诉我这是否应该在不同的社区提出。我以前从来没有问过问题,所以我没有名誉可以失去:-)。对人好点。
我正面临 oracles 用户表空间的问题。它会自动快速增长。那里存储了什么样的数据?当它达到 100% 的已用空间时会发生什么?有没有办法减少这个表空间中的数据量?目前我们有 11 MB 可用空间,总共 33 GB。删除它是个好主意吗?怎么做?谢谢。
我正在使用 Oracle 11g,并且要求“[C] 压缩我们的数据 [原文如此]”。我想知道压缩将如何影响未来的数据。
实际的 PL/SQL 不是问题(类似于以下内容:)
ALTER TABLE SOME_TABLE MOVE COMPRESS;
,但 DBA 告诉我,它MOVE COMPRESS
只会压缩现有数据,并且任何进一步的事务都需要显式压缩。运行该行后,查看表的存储属性,表压缩已正确设置以及所有内容,但这让我相信这将在后台继续进行。
我想我的问题是:我需要MOVE COMPRESS
在新事务之后运行(或类似的东西),还是 Oracle 会压缩数据?如果没有,我可以修改我的ALTER TABLE
声明来强制执行吗?
我需要从 perl 脚本连接到 Oracle 数据库,它在我的测试和使用 sqlplus 时有效,但在生产中无效。这是情况的总结:
Oracle 11g XE (11.2.0.2.0) : (Test environment)
sqlplus : OK
perl : OK
Oracle 11g (11.2.0.4.0) : (Production environment)
sqlplus : OK
perl : ERROR
报告的错误是:Connect failed because target host or object does not exist
我已经三次检查了连接设置并且没有弄错。
规格:
- 测试服务器:Windows Server 2012
- 生产服务器:Windows Server(未知版本)
- 客户端:Ubuntu 18.04 x64
- Perl:5.26.1
- SQL*Plus:12.2.0.1.0
SQL*Plus 命令:
sqlplus64 user/[email protected]/db_sid
Perl 脚本:
#!/usr/bin/perl
use DBI;
$driver = "Oracle";
$sid = "db_sid";
$host = "192.168.0.1";
$dsn = "DBI:$driver:sid=$sid;host=$host";
$dbh = DBI->connect($dsn, "user", "password");
注意:直到下个月,我才能在生产环境中测试或执行任何东西。
可能是什么问题?