这是我最近一直在考虑的另一个.我们在之前的讨论中得出结论:"自然主键是坏的,人工主键是好的." 之前使用Hibernate我已经看到Hibernate默认为所有表创建一个序列.起初我对此感到困惑,你为什么要这样做.但后来我看到了它使父母和孩子联系起来的优势.由于没有表具有相同的主键值,因此意外地将父项与不是子项的表链接不会产生任何结果.
有没有人看到这种方法的任何缺点.我只看到一个:你的数据库中不能有超过999999999999999999999999999的记录.
我想在我的SQL语句中使用%TYPE属性转换值.%TYPE属性允许您在自己的声明中使用字段,记录,嵌套表,数据库列或变量的数据类型,而不是对类型名称进行硬编码.
这有效:
insert into t1 select cast(v as varchar2(1)) from t2;
Run Code Online (Sandbox Code Playgroud)
但我想
insert into t1 select cast(v as t1.v%TYPE) from t2;
Error starting at line 16 in command:
insert into t1 select cast(v as t1.v%TYPE) from t2
Error at Command Line:16 Column:37
Error report:
SQL Error: ORA-00911: Ongeldig teken.
00911. 00000 - "invalid character"
*Cause: identifiers may not start with any ASCII character other than
letters and numbers. $#_ are also allowed after the first
character. Identifiers enclosed by doublequotes …Run Code Online (Sandbox Code Playgroud) 我有两种不同的模式。每个模式包含不同的表。例如a是schema1中的表,b是schema2中的表。现在我想将表a的数据插入表b(schema2)。
由于截止日期的压力,我可能会忽略一些事情.但这种行为让我感到惊讶.看起来好像光标缓存100行并且continue语句刷新缓存并从新缓存提取的第一条记录开始.
我把它缩小到以下脚本:
drop table test1;
create table test1 (test1_id NUMBER);
begin
for i in 1..300
loop
insert into test1 values (i);
end loop;
end;
/
declare
cursor c_test1 is
select *
from test1;
begin
for c in c_test1
loop
if mod(c.test1_id,10) = 0
then
dbms_output.put_line(c_test1%ROWCOUNT||' '||c.test1_id||' Continue');
continue;
end if;
dbms_output.put_line(c_test1%ROWCOUNT||' '||c.test1_id||' Process');
end loop;
end;
/
1 1 Process
2 2 Process
3 3 Process
4 4 Process
5 5 Process
6 6 Process
7 7 Process
8 8 …Run Code Online (Sandbox Code Playgroud) 这个问题源于杰米的这个问题。
我想我会检查 Dougman 的回答。这里发生了什么事?还原?
select created from dba_users where username = 'SYS';
select min(created) FROM dba_objects;
select created from v$database;
CREATED
-------------------------
10-SEP-08 11:24:44
MIN(CREATED)
-------------------------
10-SEP-08 11:24:28
CREATED
-------------------------
18-DEC-09 15:49:00
Run Code Online (Sandbox Code Playgroud)
从 v$database 创建的时间比用户 SYS 和 SYS 对象的创建日期晚一年多。
我有一个连接到Oracle的Django应用程序.每10个刷新左右,无论页面是什么,都会出错.第一次重启ORA-03113后,每次后续错误ORA-03135.
我已检查数据库端的alert.log和listener.log,但无法找到有关此会话终止于日志文件的任何内容.
我编辑了site-packages/django/db/init .py并在close_if_unusable_or_obsolete周围进行了try/except.页面不再出错,并且在日志文件中没有ORA错误,但我仍然看到SIGPIPE错误.
我的猜测:Django认为仍然存在连接并试图关闭它(close_if_unusable_or_obsolete)但是在Oracle端连接不存在.第一个ORA-03113不会在listener.log中产生记录,因此它似乎甚至没有到达数据库服务器.在init .py中进行修改后,结果页面是正确的.因此,构建页面的查询是成功的.它似乎是某种行政目的的联系.
我迷路了,有没有人知道如何找到这个错误?
cx_oracle==5.1.3
Django==1.8.3
Oracle Client : instantclient-basic-linux.x64-12.1.0.2.0
Database version : 11.2.0.3.0
Run Code Online (Sandbox Code Playgroud)
uwsgi_error.log
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 177, in __call__
signals.request_started.send(sender=self.__class__, environ=environ)
File "/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
File "/usr/lib/python2.7/site-packages/django/db/__init__.py", line 64, in close_old_connections
conn.close_if_unusable_or_obsolete()
File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 403, in close_if_unusable_or_obsolete
self.close()
File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 198, in close
self._close()
File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 152, in _close
return self.connection.close()
File "/usr/lib/python2.7/site-packages/django/db/utils.py", line 98, in __exit__
six.reraise(dj_exc_type, …Run Code Online (Sandbox Code Playgroud) 我有这个使用自然主键的应用程序.数据库使用WE8ISO8859P15字符集.所以在我的表格中,City有主键,如'MEDELLÍN'和'MÜNCHEN'.我有预感,我们将会遇到很多麻烦.
我看到的问题
我们应该允许PK中的变音符号吗?请随时提出您的意见.