PervSQL - Gebruik script t.b.v. aanpassen inhoud tabellen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Fore!
  • Registratie: Februari 2009
  • Laatst online: 03-10 11:01
Beste Tweakers,

Ik kom helaas niet verder door erg summiere informatie van Actian en beperkte resultaten uit zoekopdrachten. Wegens omstandigheden moet ik namelijk enkele keren per dag aanpassingen verrichten in tabellen.

Nu lukt mij dat probleemloos via de PSQL control centre.
Om dit te scripten heb je de executable nodig genaamd pvddl.exe en deze gebruikt een command-file met waar de commando's in opgenomen mogen worden

Om dit te automatiseren wil ik simpelweg via de taakplanner een BAT file aanroepen die doet het volgende:

code:
1
2
cd "c:\Program Files (x86)\Actian\PSQL\bin"
pvddl.exe DEMODATA "D:\PSQL\test_Billing.sql" -log "D:\PSQL\test_Billing.log"


De command file (waar ik niks in detail over kan vinden betreft opmaak) ziet er nu zo uit:
code:
1
2
3
4
select * from "Billing"#

update  "Billing"
set Student_ID=replace(Student_ID, '999999999', '100062607')#

Dit zijn de commando's die wel werken in PSQL control centre.
Uitvoeren via pvddl.exe komt met het volgende log:
code:
1
2
3
4
5
6
19-MAR-2020 12:56:49.553 | pvddl: select * from "Billing"
19-MAR-2020 12:56:49.553 | pvddl: The data definitions have been updated.
19-MAR-2020 12:56:49.553 | pvddl: update  "Billing"
set Student_ID=replace(Student_ID, '100062607', '999999999')
19-MAR-2020 12:56:49.553 | pvddl: Invalid cursor state.
19-MAR-2020 12:56:49.553 | pvddl: The data definitions have been updated.


Invalid cursor state state zou duiden op een tabel die niet aangepast kan worden. Maar dat is vreemd, dit lukt mij namelijk wel direct in PSQL control centre :-(.

Maar omdat ik niks kan vinden over het gebruik van PVDDL behalve de erg summiere beschrijving in PDF en cmd output zit ik nu vast :-(.

Beste antwoord (via Fore! op 20-03-2020 13:14)


  • Josk79
  • Registratie: September 2013
  • Laatst online: 12:23
Dit is een spannende query:

code:
1
2
update  "Billing"
set Student_ID=replace(Student_ID, '999999999', '100062607')#


moet het niet dit zijn:

code:
1
2
update  "Billing"
set Student_ID=100062607 WHERE Student_ID=999999999


Sowieso is het erg raar dat je het student_id moet aanpassen; misschien even uitleggen wat precies de situatie is waardoor onjuiste student_id's in de tabel terechtkomen.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Zonder enige kennis van PSQL of Actian...

Ik gok dat je Student_ID in je Billing tabel een Foreign key is naar de Student-tabel en dat je dus niet zomaar even de foreign key mag replacen. Ik gok dat je eerst de foreign key moet stoppen dan aanpassen, dan opnieuw je foreign key activeren en checken.

Waarom het in PSQL control centre wel zou kunnen werken :
- Je gebruikt niet exact dezelfde syntax, maar net een ietsiepietsie andere,
- PSQL Control Centre doet onder water wat extra dingen wat dit rechttrekt.

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 12:23
Dit is een spannende query:

code:
1
2
update  "Billing"
set Student_ID=replace(Student_ID, '999999999', '100062607')#


moet het niet dit zijn:

code:
1
2
update  "Billing"
set Student_ID=100062607 WHERE Student_ID=999999999


Sowieso is het erg raar dat je het student_id moet aanpassen; misschien even uitleggen wat precies de situatie is waardoor onjuiste student_id's in de tabel terechtkomen.

Acties:
  • 0 Henk 'm!

  • Fore!
  • Registratie: Februari 2009
  • Laatst online: 03-10 11:01
Josk79 schreef op vrijdag 20 maart 2020 @ 12:48:
Dit is een spannende query:

code:
1
2
update  "Billing"
set Student_ID=replace(Student_ID, '999999999', '100062607')#


moet het niet dit zijn:

code:
1
2
update  "Billing"
set Student_ID=100062607 WHERE Student_ID=999999999


Sowieso is het erg raar dat je het student_id moet aanpassen; misschien even uitleggen wat precies de situatie is waardoor onjuiste student_id's in de tabel terechtkomen.
Sorry dat was inderdaad niet helemaal duidelijk. Reden dat het student ID's zijn is omdat dit gaat om standaard demodata van pervasive. Live database moet ik een verwijzing aanpassen van machine x naar y, wat overeenkomt met deze handeling.

Op basis van jouw antwoord is dit het resultaat als one-liner:

code:
1
UPDATE Billing SET Student_ID=999999999 WHERE Student_ID=100062607#


edit:

Ok deze oneliner werkt niet in de live database. Ik test nog even verder. Maar ben in ieder geval een stuk verder :)

[ Voor 6% gewijzigd door Fore! op 20-03-2020 13:32 ]


Acties:
  • 0 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 12:23
Laat even de query zien die je in de live database wilt aanroepen.

Acties:
  • 0 Henk 'm!

  • Fore!
  • Registratie: Februari 2009
  • Laatst online: 03-10 11:01
code:
1
update Prod set SpdPortName=\\SRV001\Printer WHERE SpdPortName=\\SRV002\Printertemp#


Het is vrijwel letterlijk het student_id voorbeeld :)

Maar ik zag net ik dat ik de WHERE had overgeslagen... Verwacht dat dit nu wel gaat werken. Moet alleen het volgende omschakelmoment afwachten.

Acties:
  • +1 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 12:23
In dat geval zul je wel aanhalingstekens moeten gebruiken. En ik weet niet of de backslashes moeten worden ge-escaped.

code:
1
UPDATE Prod SET SpdPortName='\\SRV001\Printer' WHERE SpdPortName='\\SRV002\Printertemp'

Acties:
  • 0 Henk 'm!

  • Fore!
  • Registratie: Februari 2009
  • Laatst online: 03-10 11:01
@Josk79 Ontzettend bedankt, taak is nu te automatiseren. Scheelt weer een beetje druk op de ketel.
Er moest overigens inderdaad aanhalingstekens toegevoegd worden.
Pagina: 1