标签: oracle10g

为什么Oracle表/列/索引名称限制为30个字符?

我可以理解,很多年前会有这种限制,但现在肯定可以很容易地增加这个限制.我们有对象的命名约定,但总会有一个案例出现在我们达到这个限制的地方 - 特别是在命名外键时.

有人真的知道为什么这不是一个更大的尺寸 - 或者它是否在11g更大?


显然答案是它会破坏当前没有防御编码的脚本.我说这是一个非常令人担忧的事情,甲骨文正在试图成为数据库,想必这是什么样的,你必须不断提高的东西,否则你的产品会死一千削减死亡.

每当我在内部看到这种反对意见时,我认为是时候咬紧牙关并将其解决了.如果人们正在运行在升级Oracle版本时不检查或维护的脚本,那么让他们承受该选择的后果.为他们提供一个兼容性标志,大小达到4000,然后节省我浪费的时间,当我创建必须经常数到30的对象来检查名称是否'OK'.

oracle size oracle10g

147
推荐指数
6
解决办法
8万
查看次数

检查oracle sid和数据库名称

我想检查SID和当前数据库名称.

我正在使用以下查询来检查oracle SID

select instance from v$thread;
Run Code Online (Sandbox Code Playgroud)

但表或视图不存在错误即将到来.

我正在使用以下查询来检查当前数据库名称

select name from v$database;
Run Code Online (Sandbox Code Playgroud)

但表或视图不存在错误即将到来.

对上述两个问题有什么想法吗?

oracle oracle10g

104
推荐指数
5
解决办法
63万
查看次数

我如何使用CREATE OR REPLACE?

我是否正确理解CREATE OR REPLACE基本上意味着"如果对象存在,丢弃它,然后以任何方式创建它?"

如果是这样,我做错了什么?这有效:

CREATE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
Run Code Online (Sandbox Code Playgroud)

这不是(ORA-00922:缺失或无效选项):

CREATE OR REPLACE TABLE foo (id NUMBER,
title VARCHAR2(4000) DEFAULT 'Default Title')
Run Code Online (Sandbox Code Playgroud)

我做了些蠢事吗?我似乎无法找到有关此语法的大量文档.

oracle ddl oracle10g

93
推荐指数
6
解决办法
26万
查看次数

禁用上下文LOB创建为createClob()方法引发错误

我正在使用Hibernate 3.5.6和Oracle 10g.我在初始化期间看到了以下异常,但应用程序本身工作正常.这个例外的原因是什么?以及如何纠正?

异常
createClob()方法抛出错误时禁用上下文LOB创建:java.lang.reflect.InvocationTargetException

信息
Oracle版本:Oracle数据库10g企业版10.2.0.4.0版JDBC驱动程序:Oracle JDBC驱动程序,版本:11.1.0.7.0

java hibernate clob oracle10g

81
推荐指数
9
解决办法
12万
查看次数

DBMS_OUTPUT.PUT_LINE无法打印

执行以下代码时,它只是说过程已完成,并且不打印我想要的信息(firstName,lastName),然后是下表中select查询的其他值.

 CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,   
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
 AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
 a.actorID = id_actor;
BEGIN
FOR row IN quote_recs LOOP
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');

end loop;
END PRINT_ACTOR_QUOTES;
/ 
Run Code Online (Sandbox Code Playgroud)

当设置服务器输出时,我得到

a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
Run Code Online (Sandbox Code Playgroud)

多次!

plsql sqlplus oracle10g dbms-output

81
推荐指数
6
解决办法
36万
查看次数

Oracle中的null vs空字符串

可能重复:
为什么Oracle 9i将空字符串视为NULL?

我在Oracle 10g中的表命名TEMP_TABLE,只有两列- iddescription只为示范的缘故.

该列id是序列生成的类型主键,NUMBER(35, 0) not nullDESCRIPTION是其类型VARCHAR2(4000) not null.

在这种情况下,基本的表结构如下所示.

+--------------+-----------+---------------+
|Name          | Null?     | Type          |
+--------------+-----------+---------------+
|ID            | NOT NULL  | NUMBER(35)    |
|DESCRIPTION   | NOT NULL  | VARCHAR2(4000)|
+--------------+-----------+---------------+
Run Code Online (Sandbox Code Playgroud)

创建此表后,我尝试INSERT交替插入以下命令.

INSERT INTO temp_table (id, description) VALUES (1, null); ->unsuccessful
INSERT INTO temp_table (id, description) VALUES (2, '');   ->unsuccessful
Run Code Online (Sandbox Code Playgroud)

它们都不成功,因为not nullDESCRIPTION列上强制执行约束.

在这两种情况下,Oracle都抱怨道

ORA-01400: cannot insert NULL …
Run Code Online (Sandbox Code Playgroud)

string oracle null oracle10g

75
推荐指数
2
解决办法
14万
查看次数

如何在Oracle中查找授予用户的权限和角色?

我使用的是Linux,Oracle10g.我创建了一个名为test的用户.并授予create session并为同一用户选择任何字典权限.

我还向同一用户授予了sysdba和sysoper角色.

现在我想显示授予用户的所有权限和角色.我发现以下查询,但它只显示创建会话和选择字典权限.

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;
Run Code Online (Sandbox Code Playgroud)

请帮忙解决问题.

谢谢

security oracle oracle10g user-accounts

75
推荐指数
5
解决办法
65万
查看次数

如何通过单个测试检查null/empty/whitespace值?

我想编写一个SELECT语句,它只使用一个测试来返回没有值的列(null,empty或所有空格).

我认为这会奏效:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Run Code Online (Sandbox Code Playgroud)

但这对NULL值不起作用.

我当然可以补充一下

OR column_name IS NULL
Run Code Online (Sandbox Code Playgroud)

它会起作用,但我想要一种使用单一测试的方法.

sql oracle oracle10g

74
推荐指数
5
解决办法
26万
查看次数

如何在Oracle 10g中重命名表列

我想知道:如何重命名Oracle 10g中的表列?

oracle oracle10g

70
推荐指数
3
解决办法
17万
查看次数

CASE .. WHES中的表达式

我有1列的表,并有以下数据

Status
a1
i
t
a2
a3
Run Code Online (Sandbox Code Playgroud)

我想在我的选择查询中显示以下结果

Status| STATUSTEXT
a1    | Active
i     | Inactive
t     | Terminated
a2    | Active
a3    | Active
Run Code Online (Sandbox Code Playgroud)

我能想到的一种方法是在select查询中使用Switch When表达式

SELECT
status,
CASE status 
WHEN 'a1' THEN 'Active'
WHEN 'a2' THEN 'Active'
WHEN 'a3' THEN 'Active'
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
END AS StatusText
FROM stage.tst
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以做到这一点,我不需要写入当表达3次活动状态,并且可以在一个表达式中检查整个活动状态?

sql oracle oracle10g

68
推荐指数
4
解决办法
59万
查看次数

标签 统计

oracle10g ×10

oracle ×8

sql ×2

clob ×1

dbms-output ×1

ddl ×1

hibernate ×1

java ×1

null ×1

plsql ×1

security ×1

size ×1

sqlplus ×1

string ×1

user-accounts ×1