Stored procedures kopiëren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(8 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 9: Regel 9:
 
</pre>
 
</pre>
  
 +
== mysql.proc ==
  
 +
Online vind ik regelmatig oplossingen die gebruik maken van de systeemtabel <code>mysql.proc</code>. Deze bestaat echter niet in de nieuwere versies van MySQL [https://ocelot.ca/blog/blog/2017/08/22/no-more-mysql-proc-in-mysql-8-0/].
 +
 +
== information_schema ==
 +
 +
Info over sprocs kun je vinden in <code>information_schema.routines</code>:
 +
 +
<pre>
 +
# routines
 +
##########
 +
#
 +
select
 +
  *
 +
from
 +
  information_schema.routines
 +
where
 +
  routine_schema=database()
 +
  and
 +
  routine_type = "PROCEDURE";
 +
</pre>
 +
 +
Info over de input-parameters vind je in tabel <code>information_schema.parameters</code>:
 +
 +
<pre>
 +
# parameters
 +
############
 +
#
 +
select
 +
  *
 +
from
 +
  information_schema.parameters
 +
where
 +
  specific_schema=database();
 +
</pre>
 +
 +
Om hieromheen een routine te schrijven voor kopiëren van sprocs, lijkt me een hoop gedoe.
  
 
== Bronnen ==
 
== Bronnen ==
  
 
* https://forums.mysql.com/read.php?98,370486,371407#msg-371407
 
* https://forums.mysql.com/read.php?98,370486,371407#msg-371407
 +
* https://ocelot.ca/blog/blog/2017/08/22/no-more-mysql-proc-in-mysql-8-0/
 +
* https://dev.mysql.com/doc/refman/8.0/en/information-schema-routines-table.html
 +
* https://dev.mysql.com/doc/refman/8.0/en/information-schema-parameters-table.html
 +
* https://dev.mysql.com/doc/refman/8.0/en/show-create-procedure.html

Huidige versie van 5 nov 2020 om 14:59

Ik werk vaak met projectdatabases. Bij het starten van zo'n project, moet ik eerst alle relevante sprocs handmatig kopiëren. Dat kan gemakkelijker:

Show create procedure

Je kunt een heel eind komen met show create procedure <procedure-naam>:

show create procedure fetch_table;

mysql.proc

Online vind ik regelmatig oplossingen die gebruik maken van de systeemtabel mysql.proc. Deze bestaat echter niet in de nieuwere versies van MySQL [1].

information_schema

Info over sprocs kun je vinden in information_schema.routines:

# routines
##########
#
select 
   * 
from 
   information_schema.routines
where
   routine_schema=database()
   and
   routine_type = "PROCEDURE";

Info over de input-parameters vind je in tabel information_schema.parameters:

# parameters
############
#
select
   * 
from 
   information_schema.parameters
where
   specific_schema=database();

Om hieromheen een routine te schrijven voor kopiëren van sprocs, lijkt me een hoop gedoe.

Bronnen