Does anyone know whay the following SQL code would be generating an 802 error? Could it be because the results of the count query are zero in some cases?
CEILING(CAST(round((1 / CAST(
(
SELECT COUNT(evecas)
FROM evetrn e2
WHERE e2.evesrv IN ('T005',
'T205')
AND e2.evecnf = 'K'
AND e2.evegrp = e.evegrp
AND e.evestf = e2.evestf
AND e2.evetim = e.evetim
AND lwsys.isodates(e2.evefyr, e2.evefmm, e2.evefdd)
= lwsys.isodates(e.evefyr, e.evefmm, e.evefdd)
AND evecas !=0
AND evetyp = 'S') AS float)
),4) AS float)
*1000) /1000
The full error being generated in Squirrel:
Error: [SQL0802] Data conversion or data mapping error.
SQLState: 22012
ErrorCode: -802
And this warning:
ErrorCode: 420Warning: [SQL0420] Character in CAST argument not
valid. SQLState: 01565 ErrorCode: 420
this is the statement execute from SNowflake SP.
var sql_Statement = "select regexp_replace ('" + mainSIDColsSrc + "'', 'source_doc:','') " ;
form the query like this :
select regexp_replace ('(trim(NVL(SOURCE_DOC:claimNumber::string,'~')) ||'^'|| trim(NVL(SOURCE_DOC:notificationType::string,'~')) ||'^'|| trim(NVL(SOURCE_DOC:estimateId::string,'~')) ||'^'|| trim(NVL(SOURCE_DOC:assignmentId::string,'~')))'', 'source_doc:','')
if run the above query :
SQL compilation error: syntax error line 1 at position 82 unexpected '~'. syntax error line 1 at position 153 unexpected '~'. syntax error line 1 at position 305 unexpected ':'. parse error line 1 at position 311 near ''.
INSERT INTO Census_Demographics (median_rooms)
VALUES ('8')
WHERE match_code = 'G06000104002001';
Above statement is throwing the follow error and I haven't been able to figure it out.
You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to
use near 'WHERE match_code = 'G06000104002001'' at line 1 Query is :
INSERT INTO Census_Demographics (median_rooms) VALUES ('8') WHERE
match_code = 'G06000104002001'; Error Code: 1064
You probably intend update:
update Census_Demographics
set median_rooms = 8
where match_code = 'G06000104002001';
HANA 102.05 fails to execute the following code:
CREATE TABLE ATABLE( f INT );
CREATE PROCEDURE TestProc()
AS
BEGIN
SELECT f FROM ATABLE
FOR UPDATE; -- Without FOR UPDATE it works
END;
SELECT 'Hello' FROM DUMMY;
complaining that:
SAP DBTech JDBC: [257]: sql syntax error: incorrect syntax near "SELECT": line 8 col 2 (at pos 124)
which points outside the proceudure, at SELECT 'Hello'. The procedure itself compiles without error. The entire script completes successfully if I remove the FOR UPDATE directive. What is wrong with the original?
Update
When I execute the same query from hdbsql.exe I get:
0 rows affected (overall time 26,076 msec; server time 6518 usec)
* 257: sql syntax error: line 5 col 9 (at pos 71) SQLSTATE: HY000
* 257: sql syntax error: incorrect syntax near "END": line 2 col 1 (at pos 32) SQLSTATE: HY000
'Hello'
"Hello"
1 row selected (overall time 4644 usec; server time 143 usec)
I need to check if a record exists in the table or not from a SELECT statement. If the record exists, do an update otherwise create a record on the table. I'm trying to but i'm getting PLS-00103 error.
These are the errors that I'm getting when i run my code in DBVisaulzier:
18:00:09 [DECLARE - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000] ORA-06550: line 2, column 12:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( # % ; not null range default character
18:00:09 [BEGIN - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000]
ORA-06550: line 2, column 97:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
;
18:00:09 [IF - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
18:00:09 [ELSE - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000]
ORA-00900: invalid SQL statement
18:00:09 [END - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
18:00:09 [END - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
... 6 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 6 errors]
The following is my code:
DECLARE a NUMBER;
BEGIN
SELECT 1
INTO a
FROM FREC_EMAIL t
WHERE t.FranchiseNo = '208254846'
AND t.ReportID = 1
AND t.id = 165;
IF a=1 THEN
UPDATE FREC_EMAIL
SET email = 'blah#foo.com'
WHERE FranchiseNo = '208254846'
AND ReportID = 1
AND ID = 165;
ELSE
INSERT INTO FREC_EMAIL
(FranchiseNo, Email, ReportID)
VALUES
('208254846', 'blah#foo.com', 1);
END IF;
END;
We should always use SQL whenever possible, and avoid using Pl/SQL unless it is strictly necessary. SQL statements perform faster, they usually require less typing and they are easier to get right.
Since 9i Oracle has provided MERGE, a single SQL statement which executes an "upsert" statement.
MERGE INTO frec_email t
USING (SELECT 'blah#foo.com' as email
, '208254846' as FranchiseNo
, 1 as ReportID
, 165 as ID
FROM dual ) s
ON (s.ID = t.ID)
WHEN MATCHED THEN
UPDATE SET t.email = s.email
WHEN NOT MATCHED THEN
INSERT (t.FranchiseNo, t.Email, t.ReportID)
VALUES (s.FranchiseNo, s.Email, s.ReportID)
/
In a pl/sql block, you can do this:
update table set column=....
where.....;
if SQL%ROWCOUNT = 0 THEN
insert......
END IF;
K
Use the MERGE command (also called upsert by some). Oracle's reference (with example) here.
On a side note, if you are new to Oracle, it is worth spending time getting to grips with the offical documentation. Although it might appear difficult where to start with it, Tom Kyte's Road Map is good place to get a list of must reads.
Good luck!
I usually use the following concept, which I think is more readable than merge::
BEGIN
UPDATE FREC_EMAIL
SET email = 'blah#foo.com'
WHERE FranchiseNo = '208254846'
AND ReportID = 1
AND ID = 165;
IF SQL%NOTFOUND THEN
INSERT INTO FREC_EMAIL
(FranchiseNo, Email, ReportID, ID)
VALUES
('208254846', 'blah#foo.com', 1, 165);
END IF;
END;