sql >> Databasteknik >  >> RDS >> PostgreSQL

Repository - beställ efter i inbyggd fråga fungerar inte

Om det är ett förberett uttalande och det är ett bindningsvärde som anges i ORDER BY klausul, det är giltigt, MEN...

Det angivna bindningsvärdet kommer inte att tolkas som SQL-text. Det vill säga, värdet kommer att ses som bara ett värde (som en bokstavlig sträng). Det kommer inte att ses som ett kolumnnamn eller en ASC eller DESC sökord.

Ange ett värde för :orderClause i samband med ditt uttalande bind platshållare, det kommer att ha samma effekt som om du hade skrivit ORDER BY 'some literal' .

Och det gör egentligen ingen ordning på raderna alls.

(Detta gäller åtminstone i alla SQL-klientbibliotek som jag har använt med DB2, Teradata, Oracle, SQL Server, MySQL och MariaDB (JDBC, Perl DBI, ODBC, Pro/C, et al.)

(MyBatis tillhandahåller en bekväm mekanism för att göra variabelsubstitution i SQL-texten, dynamiskt ändra SQL-texten innan den förbereds, men dessa ersättningar hanteras INNAN satsen förbereds och förvandlas inte till bindningsplatshållare i satsen.)

Det är möjligt att få lite "dynamisk" ordning med några noggrant utformade uttryck i ORDER BY-satsen. Till exempel kan vi ha vår statiska SQL-text att vara ungefär så här:

  ORDER BY CASE WHEN :sort_param = 'name ASC'  THEN activation_name END ASC
         , CASE WHEN :sort_param = 'name DESC' THEN activation_name END DESC

(SQL-texten här är inte dynamisk, den är faktiskt statisk, det är som om vi hade skrivit.

 ORDER BY expr1 ASC
        , expr1 DESC

"Knepet" är att uttrycken i ORDER BY-satsen villkorligt returnerar antingen värdet för någon kolumn från varje rad, eller så returnerar de en bokstavlig (i exemplet ovan, den bokstavliga NULL), beroende på värdet på en bindning värde, utvärderat vid körningstidpunkten.

Nettoeffekten är att vi "dynamiskt" kan få effekten av antingen:

 ORDER BY activation_name ASC, NULL DESC

eller

 ORDER BY NULL ASC, activation_name DESC

eller

 ORDER BY NULL ASC, NULL DESC

beroende på vilket värde vi tillhandahåller för platshållaren :sort_param.



  1. Lat Lon Distance Calculation-fråga i Oracle

  2. postgresql date_trunc till godtycklig precision?

  3. Ansluter till fjärr MySQL-server med PHP

  4. Hibernate + PostgreSQL + Nätverksadresstyp (inet, cdir)