웹프로그램 연구(XII) SQL문을 복수개 실행하는 방법

[목차(도우미)]
지금까지 안되는 줄로만 여기던 것이었는데 Postgresql에서는 SQL문을 서너줄 이어서 실행해도 된다. php.pg_query에서도 확인해 보았다. 한번의 pg_query( ) 의 인수로 복수개의 실행문을 보내면 된다. 그러나 mysql_query()에서는 복수개의 실행이 안되는데, phpMyAdmin등에서는 복수개의 SQL문을 실행하고 있다. 이는 SQL 파일을 다루기 위하여 라이브러리를 개발한 것이 아닐까 추측해 본다.

pg_query에 관하여
http://php.net/manual/en/function.pg-query.php

추가한 항목의 ID를 추출하려면

  1. $sql = "INSERT INTO tableABC (f1) VALUES (123)";
  2. mysql_query($sql);
  3. mysql_query("SELECT LAST_INSERT_ID()");

또는 ID를 이용해서 무언가 하고자 했다면 곧바로 연동하면 될 것이다.
  1. $sql = "INSERT INTO tableABC (f1) VALUES (123)";
  2. mysql_query($sql);
  3. $sql ="INSERT INTO tableXYZ (f2, abc_id) VALUES (45, LAST_INSERT_ID()); ";
  4. mysql_query($sql);
LAST_INSERT_ID()  의 매뉴얼
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

PostgreSQL 에서 유사한 기능을 쓰려면 CURRVAL()
http://archives.postgresql.org/pgsql-general/2008-08/msg01058.php

기존의 데이터 ID를 구하거나 없으면 추가하는 경우

예를 들어 insert if not exists 문과 select 문을 동시에 보내서 ID를 추출하는 식이다.
  1. $sql = "INSERT INTO tableABC (f3) SELECT  '123'
  2.         WHERE '123' NOT IN (SELECT  f3 FROM tableABC);
  3.     SELECT  id FROM tableABC WHERE f3 = '123';";
  4. mysql_query($sql);
한걸음 더 나아가서 SQL 함수를 정의해서 실행하는 것이 간결하게 된다. 설명이 길어지므로 Postgresql의 예를 연결해 둔다.

PostgreSQL Example:
http://www.postgresql.org/docs/8.0/static/plpgsql-control-structures.html

Example 2:
http://stackoverflow.com/questions/4069718/postgres-insert-if-does-not-exist-already

SQL 함수의 정의 문법은 각각 Mysql Postgresql에 따라 약간 다르지만 유사하게 정의해서 사용할  수 있다.
by 금메달.아빠 on 2011. 12. 28. 08:00