我这里有个情况。我有一个表,可以从我的应用程序中查询。该表中没有唯一的标识符。
我只需要根据记录的内容(例如ORA_HASH)生成唯一编号。我知道ORA_HASH返回可重复的值。所以我想知道是否还有其他选择。
我想要这个,因为在我的应用程序中,我们将数据从表加载到网格。假设用户在网格中进行一些选择,然后进行排序。我希望保留选择。我尝试使用ROW_NUM作为标识符。但是它随着各种变化而变化。因此,如果我能找到其他方法,它将对我有很大帮助。
谢谢。
答案 0 :(得分:1)
您经常提到“重复的数据”(然后是重复的?),这就是表中没有唯一标识符的原因。
如果可能(为什么不这样做),请更改表并添加新列,我们将其称为“ ID”。为现有行填充其值 now ,并创建一个数据库触发器,该触发器将处理将来的插入操作。
这是一个例子:
SQL> create table test as select ename, job, sal from emp;
Table created.
SQL> alter table test add id number;
Table altered.
SQL> create sequence seq_id;
Sequence created.
SQL> update test set id = seq_id.nextval;
12 rows updated.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.id := nvl(:new.id, seq_id.nextval);
6 end;
7 /
Trigger created.
SQL> insert into test (ename, job, sal) values ('Littlefoot', 'loser', 100);
1 row created.
SQL> select * from test order by id;
ENAME JOB SAL ID
---------- --------- ---------- ----------
SMITH CLERK 800 1
ALLEN SALESMAN 1600 2
WARD SALESMAN 1250 3
JONES MANAGER 2975 4
MARTIN SALESMAN 1250 5
BLAKE MANAGER 2850 6
CLARK MANAGER 2450 7
KING PRESIDENT 5000 8
TURNER SALESMAN 1500 9
JAMES CLERK 950 10
FORD ANALYST 3000 11
MILLER CLERK 1300 12
Littlefoot loser 100 13
13 rows selected.
SQL>
现在,您已经有了“固定的唯一标识符”,该标识符已被固定,并且在查询数据时不会更改。
答案 1 :(得分:1)
oracle数据库中的每个表都有一个名称为ROWID的伪列,该伪列存储表记录的唯一键。您应该为此目的使用此密钥:
.//x:Attributes/x:Attribute[@Name = 'A-AssetFileName']/x:Values/x:Value
这将为您提供以下数据:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://schemas.riversand.com/mdmcenter">
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/x:Data/x:Entities/x:Entity">
<xsl:copy> <!--copy the matched Entity-->
<xsl:apply-templates select="@*"/> <!--preserve existing attributes-->
<xsl:attribute name="ProductImage">
<!--Sele the attribute value using a relative path from the matched Entity -->
<xsl:value-of select="x:Attributes/x:Attribute/x:Attributes/x:Attribute/x:Attributes/x:Attribute[@Name = 'A-AssetFileName']/x:Values/x:Value"/>
<!--If you aren't sure what the nesting structure of the Attributes will be,
then just use the descendant axis to look down as many levels as it needs to find it
<xsl:value-of select=".//x:Attributes/x:Attribute[@Name = 'A-AssetFileName']/x:Values/x:Value"/>
-->
</xsl:attribute>
<!--if you don't want to preserve the Attribute elements, remove the line below -->
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>