oracle中设置1位的整型问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中设置1位的整型问题相关的知识,希望对你有一定的参考价值。
oracle中定义有如下某表某字段:id number(1,0) ,肯定是1位数的整形,但是我在Java中 用hibernate自动生成实体类方法时,它就给我生成的是Boolean类型,请各位大虾帮帮忙,小弟在此非常感谢!
首先,id number(1),试一试,看看生成的字段声明还是不是 boolean 类型的。其次,你对这个字段进行赋值操作试一试能不能成功,比如说赋值“3”,看能不能成功,如果成功说明没有影响,如果出错的话,说明此字段在创建的时候的确是有问题的。
最后,你尝试用id number(2,0) 试一下,是不是有这种情况。一般不会出现这种情况的,愿好运。追问
id number(1) 自动生成实体类的时候还是Boolean类型 ,但是在oracle中插入1位整形的数字没有问题 ; id number(2,0) 那就不会是Boolean 类型了
参考技术A oracle定义整形字段用number(1),这种number(1,0)感觉很别扭。对于ORM映射的xml文件中,该字段的配置是不是非整形啊?对于ORM生成实体类本人只是理解个概念。呵呵追问
谢谢!
在Oracle中设置对象类型表的主键
【中文标题】在Oracle中设置对象类型表的主键【英文标题】:Setting the primary key of a object type table in Oracle 【发布时间】:2010-03-08 07:16:02 【问题描述】:我有两个 Oracle 问题。
当表由对象类型组成时,如何设置表的主键?例如
CREATE TABLE object_names OF object_type
我已经创建了一个 Varray 类型,
CREATE TYPE MULTI_TAG AS VARRAY(10) OF VARCHAR(10);
但是当我尝试这样做时
从 pg_photos p 中选择 p.tags.count;
“计数”部分出现无效标识符错误。 p.tags 是一个 MULTI_TAG,如何获取 MULTI_TAG 中的元素个数?
【问题讨论】:
欢迎来到 ***!正如您已经意识到的那样,您问了 两个 Oracle 问题。因此,请编辑此问题以删除一个问题,并将其作为一个单独的问题提出。 【参考方案1】:首先,我不建议将数据存储在 Object 表中。对象是一个很好的编程工具,但查询对象表会导致复杂的 SQL。我建议将您的数据存储在标准关系模型中并在您的过程中使用对象。
现在回答你的问题:
主键应该是不可变的,因此大多数时候 Object 类型不适合主键。您应该定义一个surrogate key 来引用您的对象。
您必须将 varray
转换为表才能从 SQL 查询它
例如:
SQL> CREATE TYPE MULTI_TAG AS VARRAY(10) OF VARCHAR(10);
2 /
Type created
SQL> CREATE TABLE pg_photos (ID number, tags multi_tag);
Table created
SQL> INSERT INTO pg_photos VALUES (1, multi_tag('a','b','c'));
1 row inserted
SQL> INSERT INTO pg_photos VALUES (2, multi_tag('e','f','g'));
1 row inserted
SQL> SELECT p.id, COUNT(*)
2 FROM pg_photos p
3 CROSS JOIN TABLE(p.tags)
4 GROUP BY p.id;
ID COUNT(*)
---------- ----------
1 3
2 3
【讨论】:
我同意使用对象表确实很复杂,不幸的是我没有选择余地。作业要求我使用对象关系功能。感谢您的意见。我已经通过 vark.com 找到了答案,但我没有使用 CROSS JOIN,所以我需要研究一下它的作用。 @Rek: 交叉连接是 没有 连接条件的连接。在您的回答中,您加入了pg_photos
和 TABLE(p.tags)
没有 where 子句,这是一个交叉连接。【参考方案2】:
1) 主键是一个约束,要在对象表上添加约束,请查看此链接:http://download-west.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjdes.htm#i452285
2) SQL 语句中不能使用 COUNT 方法: 参考评论中的链接
所以在我的情况下,我必须这样做
SELECT p.pid AS pid, count(*) AS num_tags FROM pg_photos p, TABLE(p.tags) t2 GROUP BY p.pid;
【讨论】:
#2 的链接是download.oracle.com/docs/cd/B14117_01/appdev.101/b10807/…以上是关于oracle中设置1位的整型问题的主要内容,如果未能解决你的问题,请参考以下文章