我想在Oracle 10g中创建一个可延迟的唯一功能索引.
我知道如何创建一个独特的功能索引:
create unique index LIST_ITEM_ENTRY_NO_UNIQ
on LIST_ITEM (case status when 'cancel' then null else LIST_KEY end,
case status when 'cancel' then null else ENTRY_NO end);
Run Code Online (Sandbox Code Playgroud)
我知道如何创建一个可延迟的唯一索引:
alter table LIST_ITEM add constraint LIST_ITEM_ENTRY_NO_UNIQ
unique (LIST_KEY,ENTRY_NO) deferrable initially deferred;
Run Code Online (Sandbox Code Playgroud)
知道这两件事,我试过这个:
alter table LIST_ITEM add constraint LIST_ITEM_ENTRY_NO_UNIQ
unique (case STATUS when 'cancel' then null else LIST_KEY end,
case STATUS when 'cancel' then null else ENTRY_NO end)
deferrable initially deferred;
Run Code Online (Sandbox Code Playgroud)
但是我收到"ORA-00904:无效标识符"错误.要么我的语法错误,要么Oracle不支持可延迟的功能索引?有人可以给我一个解决方案或一个明确的答案吗?
我们计划从Oracle 9.2.0.7升级到9.2.0.8.建议升级的主要原因是解决与异常"以错误终止:ORA-00904:"T2"."SYS_DS_ALIAS_4":无效标识符"的问题,当我们尝试执行DBMS_STATS.GATHER_SCHEMA_STATS时.
我们担心提议的升级可能会对我们的Java应用程序产生负面影响,或者在最坏的情况下可能甚至不支持我们的Java应用程序.
我们可以采取哪些可能的方法或策略来确保从Oracle 9.2.0.7升级到9.2.0.8不会对我们的Java应用程序产生负面影响,或者不会导致我们的Java应用程序无法正常运行.基本上我们只想确认我们的应用程序仍然支持Oracle 9.2.0.8.
谢谢.
我有桌子(MEN),有900,000条记录.
在这张表中我有字段IP和Tdate.
当我运行查询时:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
Run Code Online (Sandbox Code Playgroud)
我得到结果需要很长时间.
我尝试制作这样的索引:
create index
my_in
on
MEN (IP,Tdate );
Run Code Online (Sandbox Code Playgroud)
但如何运行查询以获得快速结果?
我试试这个:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
Run Code Online (Sandbox Code Playgroud)
并得到错误: ORA-00904
我有这个问题:
SELECT TO_CHAR(HON.CREATE_DT,'DD-MM-YYYY') as CREATE_DT,
HON.ACCOUNT_NO,(SELECT TO_CHAR(CURRENT_DATE - INTERVAL '7' DAY, 'DD-MM-YYYY') FROM DUAL) AS NV
FROM medium.HONSCRIBERS HON,
medium.HONSCRIBER_TEXT pcode,
medium.ACCESS_NUMBERS accnr
WHERE
accnr.STATUS_CD = 'CU' AND
pcode.TRADING_AS ='7777777'AND
HON.ACCOUNT_NO=pcode.ACCOUNT_NO AND
HON.ACCOUNT_NO=accnr.ACCOUNT_NO
Run Code Online (Sandbox Code Playgroud)
它返回:
[0] => Array
(
[CREATE_DT] => 28-02-2008
[ACCOUNT_NO] => 20340322
[NV] => 20-05-2011
)
[1] => Array
(
[CREATE_DT] => 28-02-2008
[ACCOUNT_NO] => 20340322
[NV] => 20-05-2011
)
Run Code Online (Sandbox Code Playgroud)
我需要比较日期CREATE_DT和NV我的查询:
SELECT TO_CHAR(HON.CREATE_DT,'DD-MM-YYYY') as CREATE_DT,
HON.ACCOUNT_NO,(SELECT TO_CHAR(CURRENT_DATE - INTERVAL '7' DAY, 'DD-MM-YYYY') FROM DUAL) AS NV
FROM medium.HONSCRIBERS …Run Code Online (Sandbox Code Playgroud) 我有(并且不拥有,所以我无法更改)具有类似于此的布局的表.
ID | CATEGORIES
---------------
1 | c1
2 | c2,c3
3 | c3,c2
4 | c3
5 | c4,c8,c5,c100
Run Code Online (Sandbox Code Playgroud)
我需要返回包含特定类别ID的行.我首先使用LIKE语句编写查询,因为值可以在字符串中的任何位置
SELECT id FROM table WHERE categories LIKE '%c2%';
将返回第2行和第3行
SELECT id FROM table WHERE categories LIKE '%c3%' and categories LIKE '%c2%'; 会再次给我第2行和第3行,但不是第4行
SELECT id FROM table WHERE categories LIKE '%c3%' or categories LIKE '%c2%'; 再次给我第2,3和4行
我不喜欢所有的LIKE陈述.我FIND_IN_SET()在Oracle文档中找到了,但它似乎不适用于10g.我收到以下错误:
ORA-00904: "FIND_IN_SET": invalid identifier
00904. 00000 - "%s: invalid identifier"
Run Code Online (Sandbox Code Playgroud)
运行此查询时:( SELECT id FROM table WHERE FIND_IN_SET('c2', categories);来自文档的示例)或此查询:( …
我在 Oracle 数据库上有以下 PL/SQL 存储过程:
PROCEDURE MyProcedure (
p_id IN NUMBER
, p_date IN DATE
, p_num IN NUMBER)
AS
BEGIN
MERGE INTO MY_TABLE mytable
USING (SELECT
p_id,
p_date,
p_num
FROM dual) temp
ON (mytable.myid = temp.p_id AND mytable.mydate = temp.p_date)
WHEN MATCHED THEN
UPDATE SET
DIFFERENCE = temp.p_num,
WHEN NOT MATCHED THEN
INSERT VALUES (
MY_TABLEIDSEQ.NEXTVAL,
temp.p_id,
temp.p_date,
temp.p_num);
END MyProcedure;
Run Code Online (Sandbox Code Playgroud)
MY_TABLE表定义如下:
CREATE TABLE "MY_DBO"."MY_TABLE"
(
"MYTABLEID" NUMBER(38,0),
"MYID" NUMBER(38,0),
"MYDATE" DATE,
"MYNUM" NUMBER(25,4)
)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用输入字段的有效值运行存储过程时,出现以下错误:
ORA-00904: "TEMP"."P_DATE": 无效标识符 …
我正在尝试创建一个帮助器存储过程来保存重复的代码.
我编写了以下存储过程,它接受表名,status_id和ROWID.
PROCEDURE sp_update_stage_status(p_table_name IN VARCHAR2,
p_status_id IN NUMBER,
p_rowid IN ROWID)
AS
BEGIN
execute immediate 'UPDATE ' || p_table_name
|| ' SET STATUS_ID = ' || p_status_id
|| ' WHERE ROWID = ' || p_rowid;
END;
Run Code Online (Sandbox Code Playgroud)
但是每当我执行它时,我得到以下内容.
ORA-00904: "AAATQEAAEAAAAHEAAB": invalid identifier
ORA-06512: at "OBR_DEV.PKG_COMMON", line 32
ORA-06512: at "OBR_DEV.PKG_DIRECTORY", line 449
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
以下代码没有问题:
select donem, mekankodu, count(yayin_kodu) yc,
SUM(CASE WHEN iade =0 THEN 1 ELSE 0 END) yys
from
( select donem,
bayi_adi,
bayi_kodu,
x.mekankodu,
mekan_adi,
mekan_tipi,
yayin_kodu,
yayin_adi,
sum(x.b2b_dagitim + x.b2b_transfer) sevk,
sum(x.b2b_iade) iade,
sum(x.b2b_dagitim + x.b2b_transfer - x.b2b_iade) satis
from mps_view2 x
where x.donem = '200910'
and x.yayin_kodu in (93,95,98,99,103,174,307,309,311,489,491,495,533,534,538,605,641,642,650,2539,
2697,4560,5049,5772,5950,5980,7318,7440,8086,8524,11161,12707,12708,12709,14376,
15107,15309,15633)
and x.mekankodu in (31851,38569,7123,7403,7481)
group by donem, bayi_adi, bayi_kodu, mekankodu, mekan_adi, mekan_tipi, yayin_kodu, yayin_adi
order by donem, bayi_kodu, mekan_adi, yayin_adi
)
group by donem, mekankodu
Run Code Online (Sandbox Code Playgroud)
当我想要包含yc/yss在我的结果表中时,我 …
以下查询返回"ORA-00904错误:SATIS:无效的标识符".当我删除该行时HAVING satis > 0,它的工作原理.我该怎么办?
SELECT donem, bolge_adi, sehir_tasra "1=?, 2=T",
COUNT(DISTINCT mekankodu) "M.SAYISI",
SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis
FROM mps_view2
WHERE donem IN ('200612','200712','200812','200912')
AND (ob IS NOT NULL OR b2b_ob IS NOT NULL)
GROUP BY donem, bolge_adi, sehir_tasra
HAVING satis > 0
ORDER BY donem, bolge_adi, sehir_tasra
Run Code Online (Sandbox Code Playgroud) 当我尝试运行以下脚本时,我不断收到无效的标识符异常:javax.servlet.ServletException:java.sql.SQLException:[Oracle] [ODBC] [Ora] ORA-00904:"CUSTID":标识符无效
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:rreOracle","xxxxxx","xxxxxxxx");
stmt = conn.createStatement();
PreparedStatement preparedStatement;
//get parameters from the request
String custID=request.getParameter("cust_ID");
String saleID=request.getParameter("sale_ID");
String firstName=request.getParameter("first_Name");
String mInitial=request.getParameter("mI");
String lastName=request.getParameter("last_Name");
String streetName=request.getParameter("street");
String city=request.getParameter("city");
String state=request.getParameter("state");
String zipCode=request.getParameter("zip_Code");
String DOB=request.getParameter("DOB");
String agentID=request.getParameter("agent_ID");
String homePhone=request.getParameter("home_Phone");
String cellPhone=request.getParameter("cell_Phone");
String profession=request.getParameter("profession");
String employer=request.getParameter("employer");
String referrer=request.getParameter("referrer");
preparedStatement = conn.prepareStatement("UPDATE customer"
+ " SET customer.cust_ID=?, customer.sale_ID=?, customer.first_Name=?, customer.mI=?, customer.last_Name=?, customer.street_Name=?, customer.city=?, customer.state=?, customer.zip_Code=?,customer. DOB=?, customer.agent_ID=?, customer.home_Phone=?, customer.cell_Phone=?, customer.profession=?, customer.employer=?, customer.referrer=?"
+ " WHERE customer.cust_ID=custID ") ;
preparedStatement.setInt(1, …Run Code Online (Sandbox Code Playgroud)