2010-07-30 30 views
1

L'acte consistant à transformer le code procédural en SQL m'a récemment intéressé. Je sais que tout n'est pas absolu dans un langage procédural complet.Déroulement du code de procédure dans SQL

Et si vous avez un langage procédural spécial? Par exemple la conversion de quelque chose comme ceci:

foreach(var row in Table){ 
    if(row.FirstName=="Foo"){ 
    yield new {row.TableRID}; 
    } 
} 

dans ce:

select TableRID from Table where FirstName='Foo' 

Y at-il un nom pour quelque chose comme ça?

Aussi, dans mon code psuedo supposons que row est immuable et il est impossible de faire quelque chose comme Table[0].FirstName... et d'autres choses qui n'ont évidemment pas de traduction (facile) en ANSI SQL.

Quelqu'un peut-il me donner un nom pour cela?

Répondre

0

Tout est exprimable dans un langage procédural de Turing-complet. Ce n'est pas toujours expressif, cependant. Parfois, vous pouvez gagner en expressivité en supprimant la puissance, en créant une langue de domaine, ou DSL, pour le type de problème que vous souhaitez résoudre. Peut-être que c'est le terme que vous recherchez?

SQL sans extensions n'est pas complet de Turing, donc comme vous le constatez, seul un sous-ensemble des programmes possibles d'un langage de Turing-complete peut être transformé.

+1

Wikipedia dit ANSI SQL est turing complet cependant? Je ne parviens pas à voir comment si – Earlz

+0

Où? [WP: Transact-SQL] (https://secure.wikimedia.org/wikipedia/en/wiki/Transact-SQL) "Transact-SQL augmente SQL avec certaines fonctionnalités supplémentaires ... Ces fonctionnalités supplémentaires font Transact -SQL Turing complet. " – clacke

+0

il n'a jamais été édité: http://en.wikipedia.org/w/index.php?title=SQL&action=historysubmit&diff=376242269&oldid=376220546 – Earlz