SQL Developer --> SQLPlus

Sziasztok!

Tudna nekem valaki abban tanácsot adni, hogy egy SQL Developerben használt lekérdezés (hiba nélkül fut) SQLPlus-ba történő átültetésekor miért fut hibára?

Az x.sql fájl-t Notepadban megírva, Unicode mentve, a lenti hibát kapom.

https://imgur.com/SGrYETe

Előre is köszönöm a válaszokat!

dombi1976

Hozzászólások

Ne notepadba mentsd, mert az tesz BOM-ot az UTF8-as filek elejére. Használj Notepad++-t, vi-t, emacsot, edlin-t, amit csak akarsz, de nótpedet ne.

Szerkesztve: 2020. 03. 06., p - 20:40

> "egy SQL Developerben használt lekérdezés (hiba nélkül fut) SQLPlus-ba történő átültetésekor miért fut hibára "

Scriptként futtatod? akkor is ilyenkor nem a rendes sqlplus interpreter kapja meg a kódot, csak egy limitált emulátor. ha tesztelni akarod a kódot akkor rendesen futtasd le sqlplus-ból...

Ha windowson fog futni amúgyis minden nem egyszerűbb 8859-2 -t használni? console-ban is chcp és olvashatóak lesznek az üzenetek :)

 

The script runner emulates a limited set of SQL*Plus features. You can often enter SQL and SQL*Plus statements and execute them by clicking the Run Script icon. The Script Output pane displays the output.

The SQL*Plus features available in the script runner include @, @@, CONNECT, EXIT, QUIT, UNDEFINE, WHENEVER, and substitution variables. For example, to run a script named c:\myscripts\mytest.sql, type @c:\myscripts\mytest in the Enter SQL Statement box, and click the drop-down next to the Execute Statement icon and select Run Script.

The following considerations apply to using the SQL Developer script runner:

  • You cannot use bind variables. (The Execute SQL Statement feature does let you use bind variables of type VARCHAR2, NUMBER, and DATE.)

  • For substitution variables, the syntax &&variable assigns a permanent variable value, and the syntax &variable assigns a temporary (not stored) variable value.

  • For EXIT and QUIT, commit is the default behavior, but you can specify rollback. In either case, the context is reset: for example, WHENEVER command information and substitution variable values are cleared.

  • DESCRIBE works for most, but not all, object types for which it is supported in SQL*Plus.

  • For SQL*Plus commands that are not supported, a warning message is displayed.

  • SQL*Plus comments are ignored.

  • For XMLType data, data in the column is displayed as "SYS.XMLDATA" if the database connection uses a JDBC Thin driver, but the expanded XML values are displayed if the connection uses an OCI (thick, Type 2) driver.

If you have SQL*Plus available on your system, you may want to use it instead of the script runner.

https://docs.oracle.com/cd/E12151_01/doc.150/e12152/intro.htm#CHDIJIEF

https://goo.gl/muWzKz (digitalocean)

és ez hol zavar cégeket akik 10-15-20+éves infra-kat használnak, magasról szarva ilyen "apróság"okra? Jah, hogy sajtreszelő? hát amíg "csak" annak az akinek érdemben dolgoznia is kell vele (aki persze <> $-t elosztóval) addig nem szánnak rá fabatkát se.. Tudod akkor keresik a vödröt amikor már legégett a ház :)

https://goo.gl/muWzKz (digitalocean)

Kicsit off: direkt szivatod magad a magyar nyelvi kornyezettel, vagy ebben KELL dolgozni? (Nem arrol beszelek, hogy a DB-ben vannak ekezetek, hanem a magyar parancssorrol.) Meg, jo, hogy ir hiba kodot, az legalabb nemzetkoziul van.

Mivel magát a sort nem raktad ide, amin elhal, csak tippelek:

 

1) UTF BOM van a file elején.

2) ékezetes betűk vannak valahol, iso fiszfaszban.

Szerkesztve: 2020. 03. 10., k - 15:56

Köszönöm mindenkinek a hozzászólást.

haladok, a megoldással de még vannak gondjaim.

A fenti képen jelentkező hibát sikerült megoldanom, kiküszöbölnöm.

A probléma az volt, hogy a kódban volt egy üres sor, a OR előtt és e miatt már nem ismerte fel utasításnak.

Szóval nem a karakter kódolás okozta az alap problémát. De ezen túl vagyok.

Amivel most küzdök, az alapvető SQL kérdés szerintem.

A WHERE részben található az alábbi részlet.

AND
  (
  PO.PO_LINE_LOCATIONS_ALL.LINE_LOCATION_ID =
  PO.PO_DISTRIBUTIONS_ALL.LINE_LOCATION_ID
  )
AND
  (
  PO.PO_DISTRIBUTIONS_ALL.LINE_LOCATION_ID =
  PO.PO_REQUISITION_LINES_ALL.LINE_LOCATION_ID(+)
  )
AND
  (
  PO.PO_REQUISITION_LINES_ALL.REQUISITION_HEADER_ID =
  PO.PO_REQUISITION_HEADERS_ALL.REQUISITION_HEADER_ID
  )

No most itt hal meg a tudásom, hogy a (+) mit is jelent. Ezét nem is tudom "átfordítani" SQLPlus-ra.

 A (+) az Oracle saját szintaktikai eleme LEFT/RIGHT JOIN-ra, attól függően, melyik oldalra teszed. A példád egy része lefordítva ANSI SQL-re: 

SELECT
FROM PO.PO_DISTRIBUTIONS_ALL PO_DISTRIBUTIONS_ALL
LEFT JOIN PO.PO_REQUISITION_LINES_ALL PO_REQUISITION_LINES_ALL
ON (PO_DISTRIBUTIONS_ALL.LINE_LOCATION_ID = PO_REQUISITION_LINES_ALL.LINE_LOCATION_ID)

De ez csak megfogalmazás kérdése, mind a két szintakszis működik Oracle alatt.