Using regexp_instr in a where clause - invalid relational operator
Whey I try to run this query in TOAD I get an ORA-00920: invalid relational operator error. It's part of a 10g stored procedure. When I highlight it and run it it prompts me for the missing values and then the error pops up. The AND in line 4 is highlighted.
select CRIME_CLASSIFICATION_ID, crime_type, nvl(count(CRIME_CLASSIFICATION_ID),0) as CRIMECNT
From vaps.vw_offenses
where regexp_instr(valoc,to_char(location_id))
AND ( fromdate is null or
offense_date between to_date(fromdate, 'mm/dd/yyyy') AND to_date(todate,'mm/dd/yyyy')
group by crime_classification_id, crime_type
Hi,
Review what REGEXP_INSTR does: it returns a NUMBER.
Your WHERE clause couldn't make any sense if you used any other kind of NUMBER expression in that place, e.g. a NUMBER literal such as 12:
select CRIME_CLASSIFICATION_ID, crime_type, nvl(count(CRIME_CLASSIFICATION_ID),0) as CRIMECNT
From vaps.vw_offenses
where 12 -- This is obviously wrong
AND ( fromdate is null or
offense_date between to_date(fromdate, 'mm/dd/yyyy') AND to_date(todate,'mm/dd/yyyy')
group by crime_classification_id, crime_type
It's not going to work any better with a function (like REGEXP_INSTR) that returns a NUMBER.
How can you fix it? That depends on what you want to do. Why are you calling REGEXP_INSTR? What is that condition checking?
Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) from all tables involved, so that the people who want to help you can re-create the problem and test their ideas.
Also post the results you want from that data, and an explanation of how you get those results from that data, with specific examples.
Always say which version of Oracle you're using (for example, 11.2.0.2.0).
See the forum FAQ: https://forums.oracle.com/message/9362002
Similar Messages
-
Case with where clause - ORA-00920: Invalid relational operator
Hi All, when I try to run the query below, I get the following error...
ORA-00920: invalid relational operator
00920. 00000 - "invalid relational operator"
*Cause:
*Action:
Error at Line: 16 Column: 5
Does anyone know what's wrong with my query? thanks in advance.
SELECT concat (year,period)
FROM DD_ACTUALS_FACT
WHERE CASE Period
WHEN 'JAN' THEN '01'
WHEN 'FEB' THEN '02'
WHEN 'MAR' THEN '03'
WHEN 'APR' THEN '04'
WHEN 'MAY' THEN '05'
WHEN 'JUN' THEN '06'
WHEN 'JUL' THEN '07'
WHEN 'AUG' THEN '08'
WHEN 'SEP' THEN '09'
WHEN 'OCT' THEN '10'
WHEN 'NOV' THEN '11'
WHEN 'DEC' THEN '12'
END as "MonthNo"
ORDER BY CONCAT (year,"MonthNo") DESCThe problem is the as "MonthNo" - you can't give an "AS" alias to an expression in a where clause.
You have not actually given any condition, just a set of translations from period into a number.
You also haven't said what you're trying to do.
Perhaps you want:
SELECT concat (year,period)
FROM DD_ACTUALS_FACT
WHERE something
ORDER BY CONCAT (year, CASE Period
WHEN 'JAN' THEN '01'
WHEN 'FEB' THEN '02'
WHEN 'MAR' THEN '03'
WHEN 'APR' THEN '04'
WHEN 'MAY' THEN '05'
WHEN 'JUN' THEN '06'
WHEN 'JUL' THEN '07'
WHEN 'AUG' THEN '08'
WHEN 'SEP' THEN '09'
WHEN 'OCT' THEN '10'
WHEN 'NOV' THEN '11'
WHEN 'DEC' THEN '12'
END ) DESC -
How can we use DECODE function in where clause.
Hi Guys,
I have to use DECODE function in where clause.
like below
select * from tab1,tab2
where a.tab1 = b.tab2
and decode(code, 'a','approved')
in this manner its not accepting?
Can any one help me on this or any other aproach?
Thanks
-LKR>
I am looking for to decode the actual db value something in different for my report.
like if A then Accepted
elseif R then Rejected
elseif D then Denied
these conditions I have to check in where clause.
>
what are you trying to do?
may be you are looking for
select * from tab1,tab2
where a.tab1 = b.tab2
and
(decode(:code, 'A','Accepted') = <table_column>
or
decode(:code, 'R','Rejected') = <table_column>
or
decode(:code, 'D','Denied') = <table_column>
) -
Using CLOB datatypes in WHERE clause
Hi All,
I have a table with two columns as CLOB datatype. I'm using Oracle 8i Enterprise Edition. I can do a query, insert, update and even delete the data in the CLOB field using Oracle's SQL Plus.
What I want is to do a search on those fields.. that is include that field in a WHERE clause. I'm using this datatype to store large number of data.
I'd like to see this query working...
SELECT * FROM MyTable WHERE CLOBFLD LIKE 'Something...';
Now this query doesn't work. It returns: 'Inconsistent datatype' near the word CLOBFLD.
Please Help me out.
Regards,
Gopi
nullI presume you want to query based on the contents of the CLOB, right ? If that is true, then you have to create a text index, using Oracle Context and then use "Contains" in the where clause to query. Hope this helps.
-
How to use Alias Columns in WHERE CLAUSE
Hi ,
I have a query where in there are 2 alias columns, start_date and end_date where in i need to use them in my WHERE clause as start_date < end_date. Please let me know if this is possible. please see the bwlow query
SELECT (GREATEST (MIN (a.start_date_active),
MIN (b.start_date_active),
MIN (c.start_date_active),
d.start_date_active ) start_date ,
LEAST (MAX (NVL (a.end_date_active, b.end_date_active)),
MAX (c.end_date_active),
MAX (b.end_date_active),
NVL (d.end_date_active,'31-DEC-2099')) end_date,
c.terr_id,
a.source_number,
e.resource_id mgr_resource_id,
d.role_relate_id role_relate_id
,g.resource_id
FROM table1 a,
table5 e,
table4 d,
table6 f,
table7 g,
table8 h ,
table2 b,
table3 c,
table9 i
WHERE 1=1
AND b.resource_id = g.resource_id
AND c.terr_id = b.terr_id
AND to_number (c.attribute3) = i.party_id
AND a.source_number = UPPER (e.salesrep_number)
AND d.role_resource_type = 'RS_INDIVIDUAL'
AND e.resource_id = d.role_resource_id
AND d.role_id = f.role_id
AND (a.start_date_active <= b.end_date_active
AND (NVL (a.end_date_active, b.end_date_active) >= b.start_date_active))
AND h.resource_id = a.resource_id
AND UPPER (g.salesrep_number) = h.source_number
GROUP BY a.source_number, c.terr_id, e.resource_id,d.start_date_active,d.end_date_active,d.role_relate_id,g.resource_id
Thanks,
LakshmiI did not understand your query but have you tried using the HAVING clause?
HAVING clause allows you to use a "where" like condition for your groupings.
See http://www.techonthenet.com/sql/having.php for some examples.
Sandeep Gandhi -
How to use alias name in where clause
Hello,
DECODE (item.inv_type,'OT', (DECODE (item.attribute2, 'STONE', 0, xfer.release_quantity1 * xfer.attribute10)
'FG', (xfer.release_quantity1 * xfer.attribute10)
) matl_val
In the above code matl_val is alias name i need to use that one in where clause as
where matl_val > 0
is this possible or anyother way can anyone help me.But the point is as you haven't read the documentation you may miss some valuable points about alias and will soon end with another problem.
>
Specify an alias for the column expression. Oracle Database will use this alias in the column heading of the result set. The AS keyword is optional. The alias effectively renames the select list item for the duration of the query. The alias can be used in the order_by_clause but not other clauses in the query.
>
http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/statements_10002.htm#SQLRF01702 -
How to use CASE stmt in Where clause
Hi,
How to use CASE stmt in WHERE clause?. I need the code. Please send me as early as possible..........Hi,
1004977 wrote:
Hi,
How to use CASE stmt in WHERE clause?. There's no difference between how a CASE expression is used in a WHERE clause, and how it is used in any other clause. CASE ... END always returns a single scalar value, and it can be used almost anywere a single scalar expression (such as a column, a literal, a single-row function, a + operation, ...) can be used.
CASE expressions aren't needed in WHERE clauses very much. The reason CASE expressions are so useful is that they allow you to do IF-THEN-ELSE logic anywhere in SQL. The WHERE clause already allows you to do IF-THEN-ELSE logic, usually in a more convenient way.
I need the code.So do the peple who want t help you. Post a query where you'd like to use a CASE expression in the WHERE clause. Post CREATE TABLE and INSERT statements for any tables used unless they are commonly available, such as scott.emp). Also, post the results you want from that sample data, and explain how you get those resuts from that data.
See the forum FAQ {message:id=9360002}
Please send me as early as possible..........As mentioned bfore, that's rude. It's also self-defeating. Nobody will refuse to help you because you don't appear pushy enough, but some people will refuse to help you if you appear too pushy. -
Can I use SYSDATE in the WHERE clause to limit the date range of a query
Hi,
Basicaly the subject title(Can I use SYSDATE in the WHERE clause to limit the date range of a query) is my question.
Is this possible and if it is how can I use it. Do I need to join the table to DUAL?
Thanks in advance.
SteliosAs previous poster said, no data is null value, no value. If you want something, you have nvl function to replace null value by an other more significative value in your query.<br>
<br>
Nicolas. -
Using 2 catsearch in where clause
Hi all,
I have problem using 2 catsearch in where clause, am not sure if there is any solution this. i have created a simple test data as below:-
-- Test Code
create table cust_catalog (
id number(16),
firstname varchar2(80),
surname varchar2(80),
birth varchar2(25),
age numeric )
INSERT ALL
INTO cust_catalog VALUES ('1','John','Smith','Glasgow','52')
INTO cust_catalog VALUES ('2','Emaily','Johnson','Aberdeen','55')
INTO cust_catalog VALUES ('3','David','Miles','Leeds','53')
INTO cust_catalog VALUES ('4','Keive','Johnny','London','45')
INTO cust_catalog VALUES ('5','Jenny','Smithy','Norwich','35')
INTO cust_catalog VALUES ('6','Andy','Mil','Aberdeen','63')
INTO cust_catalog VALUES ('7','Andrew','Smith','London','64')
INTO cust_catalog VALUES ('8','John','Smith','London','54')
INTO cust_catalog VALUES ('9','John','Henson','London','56')
INTO cust_catalog VALUES ('10','John','Mil','London','58')
INTO cust_catalog VALUES ('11','Jon','Smith','Glasgow','57')
INTO cust_catalog VALUES ('12','Jen','Smith','Glasgow','60')
INTO cust_catalog VALUES ('13','Chris','Smith','Glasgow','59')
SELECT * FROM DUAL
EXEC CTX_DDL.create_index_set('cust_iset');
EXEC CTX_DDL.CREATE_PREFERENCE ('cust_lexer', 'BASIC_LEXER');
EXEC CTX_DDL.SET_ATTRIBUTE('cust_lexer', 'SKIPJOINS' , ',''."+-()/');
EXEC CTX_DDL.Create_Preference('cust_wildcard_pref', 'BASIC_WORDLIST');
EXEC CTX_DDL.set_attribute('cust_wildcard_pref', 'prefix_index', 'YES');
EXEC CTX_DDL.ADD_INDEX('cust_iset','id');
EXEC CTX_DDL.ADD_INDEX('cust_iset','birth');
EXEC CTX_DDL.ADD_INDEX('cust_iset','age');
CREATE INDEX FIRSTNAME_IDX ON cust_catalog(firstname) INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS ('index set cust_iset LEXER cust_lexer Wordlist cust_wildcard_pref');
CREATE INDEX SURNAME_IDX ON cust_catalog(surname) INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS ('index set cust_iset LEXER cust_lexer Wordlist cust_wildcard_pref');
EXEC DBMS_STATS.GATHER_TABLE_STATS('WORKAROUND', 'CUST_CATALOG', cascade=>TRUE);
-- For removing test data
drop table cust_catalog;
EXEC CTX_DDL.DROP_INDEX_SET('cust_iset');
EXEC CTX_DDL.DROP_PREFERENCE('cust_lexer');
EXEC CTX_DDL.DROP_PREFERENCE('cust_wildcard_pref');
DROP INDEX FIRSTNAME_IDX ;
DROP INDEX SURNAME_IDX ;
------- QUESTIONS IN HERE -------------------------------------------------
SELECT * FROM cust_catalog WHERE ctxsys.catsearch (firstname, 'John','age BETWEEN 40 AND 70 AND birth=''Glasgow''')>0
I have no problem running above query
BUT if i add 2 catsearch on both firstname and surname, i have error ~ catsearch does not support function invocation
SELECT * FROM cust_catalog WHERE ctxsys.catsearch (firstname, 'John','age BETWEEN 40 AND 70 AND birth=''Glasgow''')>0 AND
ctxsys.catsearch (surname, 'Smith','age BETWEEN 40 AND 70 AND birth=''Glasgow''')>0
:(The following expands the example to include the birth (as part of the multi_column_datastore) and age (using filter by during index creation and sdata in the query) and show the execution plan. I have provided the script and execution separately.
-- script:
DROP TABLE cust_catalog
EXEC CTX_DDL.DROP_PREFERENCE ('cust_lexer')
EXEC CTX_DDL.DROP_PREFERENCE ('cust_wildcard_pref')
EXEC CTX_DDL.DROP_PREFERENCE ('your_datastore')
EXEC CTX_DDL.DROP_SECTION_GROUP ('your_sec')
CREATE TABLE cust_catalog
(id NUMBER (16),
firstname VARCHAR2 (80),
surname VARCHAR2 (80),
birth VARCHAR2 (25),
age NUMERIC)
INSERT ALL
INTO cust_catalog VALUES (1, 'John', 'Smith', 'Glasgow', 52)
INTO cust_catalog VALUES (2, 'Emaily', 'Johnson', 'Aberdeen', 55)
INTO cust_catalog VALUES (3, 'David', 'Miles', 'Leeds', 53)
INTO cust_catalog VALUES (4, 'Keive', 'Johnny', 'London', 45)
INTO cust_catalog VALUES (5, 'Jenny', 'Smithy', 'Norwich', 35)
INTO cust_catalog VALUES (6, 'Andy', 'Mil', 'Aberdeen', 63)
INTO cust_catalog VALUES (7, 'Andrew', 'Smith', 'London', 64)
INTO cust_catalog VALUES (8, 'John', 'Smith', 'London', 54)
INTO cust_catalog VALUES (9, 'John', 'Henson', 'London', 56)
INTO cust_catalog VALUES (10, 'John', 'Mil', 'London', 58)
INTO cust_catalog VALUES (11, 'Jon', 'Smith', 'Glasgow', 57)
INTO cust_catalog VALUES (12, 'Jen', 'Smith', 'Glasgow', 60)
INTO cust_catalog VALUES (13, 'Chris', 'Smith', 'Glasgow', 59)
SELECT * FROM DUAL
EXEC CTX_DDL.CREATE_PREFERENCE ('cust_lexer', 'BASIC_LEXER')
EXEC CTX_DDL.SET_ATTRIBUTE ('cust_lexer', 'SKIPJOINS' , ',''."+-()/')
EXEC CTX_DDL.Create_Preference ('cust_wildcard_pref', 'BASIC_WORDLIST')
EXEC CTX_DDL.set_attribute ('cust_wildcard_pref', 'prefix_index', 'YES')
EXEC CTX_DDL.CREATE_PREFERENCE ('your_datastore', 'MULTI_COLUMN_DATASTORE')
EXEC CTX_DDL.SET_ATTRIBUTE ('your_datastore', 'COLUMNS', 'firstname, surname, birth')
EXEC CTX_DDL.CREATE_SECTION_GROUP ('your_sec', 'BASIC_SECTION_GROUP')
EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'firstname', 'firstname', TRUE)
EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'surname', 'surname', TRUE)
EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'birth', 'birth', TRUE)
CREATE INDEX context_idx
ON cust_catalog (firstname)
INDEXTYPE IS CTXSYS.CONTEXT
FILTER BY age
PARAMETERS
('DATASTORE your_datastore
SECTION GROUP your_sec
LEXER cust_lexer
WORDLIST cust_wildcard_pref')
COLUMN firstname FORMAT A10
COLUMN surname FORMAT A10
COLUMN birth FORMAT A10
SET AUTOTRACE ON EXPLAIN
SELECT * FROM cust_catalog
WHERE CONTAINS
(firstname,
'(John WITHIN firstname)
AND (Glasgow WITHIN birth)
AND (SDATA (age BETWEEN 40 AND 70))') > 0
SET AUTOTRACE OFF-- execution:
SCOTT@orcl_11gR2> DROP TABLE cust_catalog
2 /
Table dropped.
SCOTT@orcl_11gR2> EXEC CTX_DDL.DROP_PREFERENCE ('cust_lexer')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.DROP_PREFERENCE ('cust_wildcard_pref')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.DROP_PREFERENCE ('your_datastore')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.DROP_SECTION_GROUP ('your_sec')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> CREATE TABLE cust_catalog
2 (id NUMBER (16),
3 firstname VARCHAR2 (80),
4 surname VARCHAR2 (80),
5 birth VARCHAR2 (25),
6 age NUMERIC)
7 /
Table created.
SCOTT@orcl_11gR2> INSERT ALL
2 INTO cust_catalog VALUES (1, 'John', 'Smith', 'Glasgow', 52)
3 INTO cust_catalog VALUES (2, 'Emaily', 'Johnson', 'Aberdeen', 55)
4 INTO cust_catalog VALUES (3, 'David', 'Miles', 'Leeds', 53)
5 INTO cust_catalog VALUES (4, 'Keive', 'Johnny', 'London', 45)
6 INTO cust_catalog VALUES (5, 'Jenny', 'Smithy', 'Norwich', 35)
7 INTO cust_catalog VALUES (6, 'Andy', 'Mil', 'Aberdeen', 63)
8 INTO cust_catalog VALUES (7, 'Andrew', 'Smith', 'London', 64)
9 INTO cust_catalog VALUES (8, 'John', 'Smith', 'London', 54)
10 INTO cust_catalog VALUES (9, 'John', 'Henson', 'London', 56)
11 INTO cust_catalog VALUES (10, 'John', 'Mil', 'London', 58)
12 INTO cust_catalog VALUES (11, 'Jon', 'Smith', 'Glasgow', 57)
13 INTO cust_catalog VALUES (12, 'Jen', 'Smith', 'Glasgow', 60)
14 INTO cust_catalog VALUES (13, 'Chris', 'Smith', 'Glasgow', 59)
15 SELECT * FROM DUAL
16 /
13 rows created.
SCOTT@orcl_11gR2> EXEC CTX_DDL.CREATE_PREFERENCE ('cust_lexer', 'BASIC_LEXER')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.SET_ATTRIBUTE ('cust_lexer', 'SKIPJOINS' , ',''."+-()/')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.Create_Preference ('cust_wildcard_pref', 'BASIC_WORDLIST')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.set_attribute ('cust_wildcard_pref', 'prefix_index', 'YES')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.CREATE_PREFERENCE ('your_datastore', 'MULTI_COLUMN_DATASTORE')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.SET_ATTRIBUTE ('your_datastore', 'COLUMNS', 'firstname, surname, birth')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.CREATE_SECTION_GROUP ('your_sec', 'BASIC_SECTION_GROUP')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'firstname', 'firstname', TRUE)
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'surname', 'surname', TRUE)
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> EXEC CTX_DDL.ADD_FIELD_SECTION ('your_sec', 'birth', 'birth', TRUE)
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> CREATE INDEX context_idx
2 ON cust_catalog (firstname)
3 INDEXTYPE IS CTXSYS.CONTEXT
4 FILTER BY age
5 PARAMETERS
6 ('DATASTORE your_datastore
7 SECTION GROUP your_sec
8 LEXER cust_lexer
9 WORDLIST cust_wildcard_pref')
10 /
Index created.
SCOTT@orcl_11gR2> COLUMN firstname FORMAT A10
SCOTT@orcl_11gR2> COLUMN surname FORMAT A10
SCOTT@orcl_11gR2> COLUMN birth FORMAT A10
SCOTT@orcl_11gR2> SET AUTOTRACE ON EXPLAIN
SCOTT@orcl_11gR2> SELECT * FROM cust_catalog
2 WHERE CONTAINS
3 (firstname,
4 '(John WITHIN firstname)
5 AND (Glasgow WITHIN birth)
6 AND (SDATA (age BETWEEN 40 AND 70))') > 0
7 /
ID FIRSTNAME SURNAME BIRTH AGE
1 John Smith Glasgow 52
1 row selected.
Execution Plan
Plan hash value: 495863752
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 136 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| CUST_CATALOG | 1 | 136 | 4 (0)| 00:00:01 |
|* 2 | DOMAIN INDEX | CONTEXT_IDX | | | 4 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("CTXSYS"."CONTAINS"("FIRSTNAME",'(John WITHIN firstname)
AND (Glasgow WITHIN birth) AND (SDATA (age BETWEEN 40 AND 70))')>0)
Note
- dynamic sampling used for this statement (level=2)
SCOTT@orcl_11gR2> SET AUTOTRACE OFF -
Use "ListContains' in a WHERE clause
I believe I have a syntax problem and could you some help.
First, I have a field in an Access DB called 'degree" that conatins
a list of numbers. This list can be any combination of the numbers
4 through 32. On my search page I have a selection box in a form to
select a value of the degree to search for. The variable passed
from the form is called "degreeValue". I have a component that lets
me build my WHERE clause using several seach criteria. It functions
perfectly prior to adding the search for "degree". I attempted to
use "ListContains" in the WHERE clause using "degree" as the name
of my list and "degreeValue" as my substring to search for. The
error I get says that "variable degree is undefined". I am
attaching the full code of the compoanent so you can see it. Again,
it works if you take out the subclause build for "degree".I understand what you are saying and in other situations have
done my tables that way. I didn't this time because this is one of
those... "add it later" kind of things. Yes, the field does look
like "1,2,3,4,etc.." The inventory a couple thousand items each
with a number (catno). As you obviously noticed the inventory table
houses most of the data for the items. The "degree" field in the
past was only used to populate a series of checkboxes and was not
searchable, thus a list was used.
With a possibility of 29 values for "degree" and a
possiblility of over 2,000 inventory items you can see a newly
created table might become quite large. It would be nice if I could
use the current structure.
You are absolutely correct saying the design should be
different. Thank you for your quick reply and good information. -
Is it possible to use LONG columns in WHERE clause or ORDER BY?
Is it possible to use LONG columns in WHERE clause or ORDER BY?
Hi,
LONG data type is deprecated, maybe could you change your column type to LOB ?
Nonetheless below is a workaround which may fit your needs if forced to use LONG.
It uses a function which returns you a CLOB. It allows you to use the converted "LONG" column in a WHERE clause.
Then if you want to order by you have to convert the CLOB to a VARCHAR using DBMS_LOB.SUBSTR.
SQL> CREATE TABLE my_table (id NUMBER, description LONG);
Table created.
SQL> INSERT INTO my_table VALUES (1, 'FIRST LONG');
1 row created.
SQL> INSERT INTO my_table VALUES (2, 'ANOTHER LONG');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> CREATE TYPE my_type_row AS OBJECT (id INTEGER, description CLOB);
2 /
Type created.
SQL> CREATE TYPE my_type_table AS TABLE OF my_type_row;
2 /
Type created.
SQL> CREATE OR REPLACE FUNCTION get_my_long
2 RETURN my_type_table
3 PIPELINED
4 AS
5 v_tab my_type_table := my_type_table ();
6 BEGIN
7 FOR cur IN (SELECT id, description FROM my_table)
8 LOOP
9 PIPE ROW (my_type_row (cur.id, cur.description));
10 END LOOP;
11 RETURN;
12 END;
13 /
Function created.
SQL> SELECT
2 id,
3 description
4 FROM
5 TABLE (get_my_long ())
6 WHERE
7 description LIKE '%LONG'
8 ORDER BY
9 DBMS_LOB.SUBSTR(description);
ID DESCRIPTION
2 ANOTHER LONG
1 FIRST LONG
SQL> SELECT
2 id,
3 description
4 FROM
5 TABLE (get_my_long ())
6 WHERE
7 description LIKE 'FI%';
ID DESCRIPTION
1 FIRST LONG
SQL>Kind regards,
Ludovic -
Hi,
if I :
create table t (a number, b number, c number);
and then run the following query:
delete from t where a='1' and (b, c) in (
select b, c from t
where a='1'
group by b, c
having count(*) > 1);
-- nothing to see here
I get the following error:
ORA-00920: invalid relational operator
If I remove the "-- nothing to see here" comment, the query runs fine.
If I remove the quotes around the 1s it also runs fine, with or without the trailing comment.
I had a look through the forum and couldn't see this listed anywhere, though I presume others have come across similar problems?
I presume there is a simpler test case; I tried to reduce it a bit, but most of what is there seems to be needed to reproduce the error.
Note that it doesn't have to be a comment following the query; any text at all will cause the same error.
regards,
WilliamHaving just played around a bit, if you change the subquery to just return a single column, say "b" rather than "b" and "c":
delete from t where a='1' and b in (
select b from t
where a='1'
group by b
having count(*) > 1);
-- nothing to see here
Then I get error "ORA-00911: invalid character" instead.
If I run the buffer as a script (F5) I get:
SQL ERROR:ORA-00911: invalid character
delete from t where a='1' and b in (
select b from t
where a='1'
group by b
having count(*) > 1);
-- nothing to see here
ORA-00911: invalid character
In case that helps you locate it at all.
Note: if I move the "group by" clause onto the where line then it runs correctly.
regards,
William
Message was edited by:
user454290 -
Requesting help-On a report Getting ora-00920 invalid relational operator.
Hi everyone,
I am having a report region with the following query:
select CASE
WHEN ISITRECENTADDENDUM(meckey_fk,code)
THEN
'<a href="javascript:popUp2('''
|| 'f?p=&APP_ID.:61:&SESSION.::NO::P61_MECKEY_FK:'
|| &P60_MECKEY.
|| ''', 700, 700);">'
|| '<img src="#IMAGE_PREFIX#gobut.gif">'
|| '</a>'
ELSE NULL
END EditAddendum,
'<a href="javascript:popURL('''
||'&REPORTS_URL.keynewmec&P_1=&P60_MECNUM.'
|| ''', 700, 700);">'
|| '<img src="#WORKSPACE_IMAGES#printer.jpg">'
|| '</a>'
PrintMEC,
"CODE",
"MECKEY_FK",
"ADDENDUM",
"WHO_CREATED",
"WHEN_CREATED"
from "C_ADDENDUMS"
where "MECKEY_FK" = v('P60_MECKEY')
And my function returning boolean is as follows:
create or replace FUNCTION "ISITRECENTADDENDUM"
(meckeyi in number,
codei in varchar2)
return Boolean
is
x varchar2(1);
begin
select max(code) into x from c_addendums where meckey_fk = meckeyi;
if x = codei then
return true;
else
return false;
end if;
exception
when others then
return FALSE;
end;
But I am getting ORA-00920 invalid relational operator. Can anyone please help me out? I am not knowing where the error is. When I run the function by itself I am getting "False" returned as expected. Appreciate any advice on this.
Rgds,
Suma.Suma,
It looks like what you are trying to do is display a link for the record with the highest value in the Code column, and nothing for the other records.
If that is the case, you can eliminate the function and just use a SQL query like this:
(not tested)
select CASE
WHEN code = Max(code) over (partition by meckey_fk)
THEN
'<a href="#">'
|| ' '
|| '< img class="TargetAlertIcon" src="chrome://targetalert/content/skin/internal.png"></a>'
ELSE NULL
END EditAddendum,
'<a href="#">'
|| ' '
|| '< img class="TargetAlertIcon" src="chrome://targetalert/content/skin/internal.png"></a>' PrintMEC,
"CODE", "MECKEY_FK", "ADDENDUM", "WHO_CREATED", "WHEN_CREATED"
from "C_ADDENDUMS"
where "MECKEY_FK" = :P60_MECKEYIs that what you're trying to do?
Doug -
Error: ORA-00920: invalid relational operator (WWV-16016)
Hi,
When I try to query in the form, I'm getting the following error
An unexpected error occurred: ORA-00920: invalid relational operator (WWV-16016).
The form has a field of type varchar2 with lov attached to it. This error is happening only if I enter characters more than 40 or select a value which has more than 40 characters from the lov.
Anbody had this problem?..Is there a solution for this?..Help would be appreciated.
Thanks
PJI figured out the problem and it seems like if the value has any 'IN' or 'BETWEEN' and try to query this error is happening and it's not because of character length. I think Portal assumes that relational operator is entered and tries to query based on those words. Is it a bug in the Portal?..
Thanks
PJ -
Invalid relational operator in where clause dynamic
I have a procedure where I pass the WHERE CLAUSE as a parameter like this:
PROCEDURE PRC_CONSULTAR_AFIL_PEND(PV_WHERE IN VARCHAR2,
RESULTSETM IN OUT SYS_REFCURSOR)
IS
BEGIN
OPEN RESULTSETM FOR
'SELECT PAISAFIL,
TIPDOCAFIL,
NUMDOCAFIL,
APPAFIL,
APMAFIL,
NOMAFIL,
SEXAFIL,
FECNACAFIL,
CODPNA,
ESTADO,
FECHA,
TO_DATE(FECGEN),
NOMCOLUMN
FROM SUNAFILERR
WHERE ' || PV_WHERE;
I am passing the where clause as: 'APPAFIL'||' '||'APMAFIL'||' '||'NOMAFIL LIKE UPPER(rojas%)'Miguel Angel wrote:
I have a procedure where I pass the WHERE CLAUSE as a parameter like this:
PROCEDURE PRC_CONSULTAR_AFIL_PEND(PV_WHERE IN VARCHAR2,
RESULTSETM IN OUT SYS_REFCURSOR)
IS
BEGIN
OPEN RESULTSETM FOR
'SELECT PAISAFIL,
TIPDOCAFIL,
NUMDOCAFIL,
APPAFIL,
APMAFIL,
NOMAFIL,
SEXAFIL,
FECNACAFIL,
CODPNA,
ESTADO,
FECHA,
TO_DATE(FECGEN),
NOMCOLUMN
FROM SUNAFILERR
WHERE ' || PV_WHERE;
I am passing the where clause as: 'APPAFIL'||' '||'APMAFIL'||' '||'NOMAFIL LIKE UPPER(rojas%)'So your where clause is
WHERE APPAFIL APMAFIL NOMAFIL LIKE UPPER (rojas%)Can you see why that's an error? It would make more sense if there was an operator between APPAFIL and APMAFIL, but then there's obviously something missing between APMAFIL and NOMAFIL as well, and some quotes missing later on.
The following is valid SQL code
WHERE APPAFIL != APMAFIL
AND NOMAFIL LIKE UPPER ('rojas%')Of course, I have no idea if that's what you want or not.
Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements) for any tables used, and the results you want from that data.
if the problem involves parameters (such as the pv_where), then post a couple of different parameters, and the results you want from the same sample data for each parameter.
Explain how you get those results from that parameter and that data.
Always say which version of Oracle you're using.
Maybe you are looking for
-
Hi , does anyone know how to fix the problem with imessages. Sometimes it works and more often than not it doesn't. I upgraded my iphone 3gs a couple of weeks ago and the imessaging worked splendidly but now it hardly works at all. Both my daughters
-
How to add a button to play 1 minute audio?
I would like to add a button to a web page. Clicking the button would play about one minute of audio. I will appreciate very much if someone could help me accomplish this. Thanks greatly in advance. Tom
-
Cannot move project with Framemaker reference to another PC
I have a projekt that comprises a Framemaker import by reference. This is organized in one directory with two subdirectories (one for the Framemaker sources and one for the RH project). When I move (copy) the complete master directory to a network dr
-
What is material yeild ?
Hi Gurus, plz let me know what is material yeilding , is there any standard program to know the same or if any one can provide me the sample code for the sam e..it will be of great help for me ... thanks in advance. regards, Vikram
-
Cascading physical standby from another physical standby for primary rac
my supplier told me that is possible mount a cascade physical standby from a physical standby for my rac installation. but according the note "409013.1" seems not: "Cascading a logical or physical standby database from a physical standby database is