sql >> Database teknologi >  >> RDS >> Mysql

Dvale:kunne ikke udføre indbygget massemanipulationsforespørgsel

Når du har parametriserede forespørgsler i databaser (forberedte udsagn), MÅ tildeling af værdier til parametre IKKE ændre strukturen og udførelsesstien for forespørgslen (ellers behandler databaser dem ikke som parametriserede forespørgsler og vil give undtagelser).

Det er derfor, du ikke kan have forberedt erklæringer til forespørgsler som:

  • select * from myTable order by ?
  • select id, f1, ? from myTable
  • select * from ? .

fordi tildeling af en værdi til hver parameter ændrer forespørgselsudførelsesstien (husk, at forberedte udsagns forespørgsel parses én gang og resulterer i en enkelt udførelsessti).

De samme regler gælder for Hibernate-forespørgselsparser, du må ikke tildele en parameter en værdi, der ændrer forespørgselsstrukturen.

Tildeling af en streng med værdierne 1, 2, 3 til et SKAL-AT-VÆRE-ET-NUMMER parametre er det samme, faktisk vil den første forespørgsel blive oversat på samme måde som update weight_note_receipt set pledge_id =:pledge where wn_id = :wns men den anden vil blive oversat som update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , åbenbart forskellige forespørgsler med forskellige udførelsesstier.

Så selvom Hibernate ikke kastede en undtagelse, ville din database gøre det.



  1. Indsaml skemastatistik ved hjælp af FND_STATS i EBS 11i og R12

  2. Føj ordensindikatoren til en dato i Oracle

  3. Hvordan indsætter man posten med MySQL NOW() funktion i MySQLi med bind_param?

  4. Nyttige forespørgsler om oracle EBS-adgangskodeudløb/politik/indstillinger