Perl DBI 데이터베이스 작업

9866 단어 데이터베이스
이번 회의에서는 PERL을 사용하여 Oracle 데이터베이스 및 기타 데이터베이스에 액세스하는 방법에 대해 설명합니다.
  • Oraperl 모듈에서 Oracle에 액세스하려면 Oraperl 매뉴얼을 참조하십시오.
  • DBI 모듈은 공통 방식으로 데이터베이스에 액세스합니다.본 장에서 우리는 이 모듈을 토론할 것이다.

  • Perl 5에서는 DBI를 사용하여 데이터베이스 애플리케이션을 작성하기가 매우 쉬워졌습니다.DBI는 데이터베이스에 독립된 인터페이스인 Perl DBI를 대표하여 Perl 코드와 베이스 데이터베이스 사이에 추상적인 층을 제공한다. 이것은 데이터베이스의 실현 방식을 쉽게 전환할 수 있음을 의미한다.
    DBI는 Perl 프로그래밍 언어의 데이터베이스 접근 모듈입니다.그것은 실제 사용하는 데이터베이스에 독립된 일치된 데이터베이스 인터페이스를 제공하기 위해 변수와 약속을 정의했다.
    DBI 애플리케이션 아키텍처
    DBI는 백엔드에서 기존 데이터베이스와 독립적입니다.Oracel, MySQL, Informix 등을 사용하고 있든지 간에 DBI를 사용할 수 있습니다.다음은 구조도입니다.
    DBI는 API를 통해 응용 프로그램 프로그래밍 인터페이스에서 SQL 명령을 실행하고 이를 실제 실행하도록 파견하는 모든 드라이버다.마지막으로 DBI는 scritp 결과를 호출하는 책임 있는 드라이버입니다.
    태그 및 규칙
    전체 이 장에서 아래의 기호를 사용할 것이며, 너도 같은 약속을 따라야 한다고 건의할 것이다.
      $dsn    Database source name
      $dbh    Database handle object
      $sth    Statement handle object
      $h      Any of the handle types above ($dbh, $sth, or $drh)
      $rc     General Return Code  (boolean: true=ok, false=error)
      $rv     General Return Value (typically an integer)
      @ary    List of values returned from the database.
      $rows   Number of rows processed (if available, else -1)
      $fh     A filehandle - by www.yiibai.com
      undef   NULL values are represented by undefined values in Perl
      \%attr  Reference to a hash of attribute values passed to methods
    

    데이터베이스 연결
    MySQL 데이터베이스를 사용할 경우데이터베이스에 연결하기 전에 다음을 확인합니다.
  • 데이터베이스 TEstdB를 만들었습니다.
  • 당신은 이미 테이블 TESTTABLE는 TEstdB에 있습니다.
  • 이 표에는 다음과 같은 몇 개의 필드가 있습니다 FIRSTNAME, LAST_NAME, AGE, SEX 및 INCOME.
  • 데이터베이스 사용자 ID(사용자 이름)'testuser'와 비밀번호'test123'설정이 정확하여 TEstdB
  • 에 접근할 수 있음
  • Perl DBI 모듈은 이미 당신의 기계에 설치되어 있습니다.
  • 당신은 이미 MySQL 강좌를 겪었고 MySQL에 대한 기초를 배웠습니다.

  • 다음은 MySQL 데이터베이스 "TEstdB"에 연결된 예입니다.
    #!/usr/bin/perl
    
    use DBI
    use strict;
    
      my $driver = "mysql"; 
      my $database = "TESTDB";
      my $dsn = "DBI:$driver:database=$database";
      my $userid = "testuser";
      my $password = "test123";
      my $dbh = DBI->connect($dsn, $userid, $password ) 
                  or die $DBI::errstr;
    

    데이터 원본과 연결하면 데이터베이스 핸들을 되돌려주고 $dbh에 저장합니다. 그렇지 않으면 $dbh는undef값과 $DBI로 설정됩니다.:errstr는 오류 문자열을 되돌려줍니다.
    삽입 작업
    테이블 TEST 을 만들거나 쓰기TABLE 로깅 시 INSERT 작업이 필요합니다.따라서 데이터베이스 연결을 만들면 레코드 TEST 을 만들 준비가 되어 있습니다.TABLE.다음은 생성된 단일 레코드가 TEST 입니다.TABLE 단계.비슷한 방식으로 여러 개의 기록을 만들 수 있습니다.
    레코드 작성에는 다음 절차가 필요합니다.
  • INSERT 문을 사용할 SQL 문을 준비합니다.이 작업은 prepare () API를 사용합니다.
  • SQL 조회를 수행하여 데이터베이스에서 선택한 결과입니다.이것은 execute() API를 사용하여 수행됩니다.
  • 문장 손잡이를 방출한다.finish() API 사용
  • 모든 것이 순조롭게 진행되면commit에서 이 조작을 합니다. 그렇지 않으면 롤백을 통해 업무를 완성할 수 있습니다.제출과 스크롤은 다음 장에서 설명합니다.
  •  my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                              (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                               values
                              ('john', 'poul', 'M', 30, 13000)");
     $sth->execute() or die $DBI::errstr;
     $sth->finish();
     $dbh->commit or die $DBI::errstr;
    

    바인딩 값 사용
    입력된 값을 미리 주지 않았을 때 일종의 상황이 발생할 수 있다.이러한 상황에서 귀속된 값이 사용됩니다.실제 값과 실제 값을 물음표로 대체한 다음execute () API를 통과합니다.
     my $first_name = "john";
     my $last_name = "poul";
     my $sex = "M";
     my $income = 13000;
     my $age = 30;
     my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                              (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                               values
                              (?,?,?,?)");
     $sth->execute($first_name,$last_name,$sex, $age, $income) 
                 or die $DBI::errstr;
     $sth->finish();
     $dbh->commit or die $DBI::errstr;
    

    읽기 작업
    모든 데이터베이스의 읽기 조작은 데이터베이스에서 유용한 정보를 얻는 것을 가리킨다.따라서 일단 우리가 데이터베이스 연결을 구축하면 우리는 이 데이터베이스에 가서 조회할 준비가 되어 있다.다음은 프로그램 조회 연령이 20세 이상인 모든 기록입니다.이것은 네 가지 절차가 필요할 것이다
  • SQL 기반 SQL 쿼리를 준비하는 데 필요한 기준이 작업은 prepare () API를 사용합니다.
  • SQL 조회를 수행하여 데이터베이스에서 선택한 결과입니다.이 작업에는 execute() API가 사용됩니다.
  • 모든 결과를 하나씩 추출하여 출력합니다.이것은fetchrow 를 사용합니다array() API.
  • 문장 손잡이를 방출한다.이것은finish() API
  • 를 사용합니다.
      my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                               FROM TEST_TABLE 
                               WHERE AGE > 20");
      $sth->execute() or die $DBI::errstr;
      print "Number of rows found :" + $sth->rows;
      while (my @row = $sth->fetchrow_array()) {
         my ($first_name, $last_name ) = @row;
         print "First Name = $first_name, Last Name = $last_name
    "; } $sth->finish();

    바인딩 값 사용
    미리 주어진 조건이 없을 때 일종의 상황이 발생할 수 있다.이러한 상황에서 귀속된 값이 사용됩니다.실제 값과 실제 값을 물음표로 대체한 다음execute () API.아래의 예.
    $age = 20;
      my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                               FROM TEST_TABLE
                               WHERE AGE > ?");
      $sth->execute( $age ) or die $DBI::errstr;
      print "Number of rows found :" + $sth->rows;
      while (my @row = $sth->fetchrow_array()) {
         my ($first_name, $last_name ) = @row;
         print "First Name = $first_name, Last Name = $last_name
    "; } $sth->finish();

    업데이트 작업
    모든 데이터베이스 업데이트 작업은 데이터베이스에서 하나 이상의 기록을 업데이트할 수 있음을 의미합니다.다음은 모든 기록을 갱신하는 과정입니다. SEX가 'M' 으로 갱신하는 과정입니다.여기서 우리는 AGE의 모든 남성을 1년 동안 늘릴 것이다.이것은 세 가지 절차가 필요할 것이다
  • 필요한 기준에 따라 SQL 쿼리를 준비합니다.이 작업은 prepare () API를 사용합니다.
  • SQL 조회를 수행하여 데이터베이스에서 선택한 결과입니다.이 작업에는 execute() API가 사용됩니다.
  • 문장 손잡이를 방출한다.이 작업은finish() API
  • 를 사용할 것이다
  • 모든 것이 순조롭게 진행되면 이 조작을 제출해야 합니다. 그렇지 않으면 스크롤을 해서 일을 완성할 수 있습니다.다음 섹션의 커밋 및 롤백에 대한 API 를 참조하십시오.
  •   my $sth = $dbh->prepare("UPDATE TEST_TABLE
                               SET   AGE = AGE + 1 
                               WHERE SEX = 'M'");
      $sth->execute() or die $DBI::errstr;
      print "Number of rows updated :" + $sth->rows;
      $sth->finish(); // by www.yiibai.com
      $dbh->commit or die $DBI::errstr;
    

    바인딩 값 사용
    미리 주어진 조건이 없을 때는 일종의 상황이 발생할 수 있다.이러한 상황에서 귀속된 값이 사용됩니다.실제 값과 실제 값을 물음표로 대체한 다음execute () API.아래의 예.
    $sex = 'M';
      my $sth = $dbh->prepare("UPDATE TEST_TABLE
                               SET   AGE = AGE + 1
                               WHERE SEX = ?");
      $sth->execute('$sex') or die $DBI::errstr;
      print "Number of rows updated :" + $sth->rows;
      $sth->finish();
      $dbh->commit or die $DBI::errstr;
    

    어떤 경우, 값을 설정하려고 하는데, 이것은 미리 정해지지 않았기 때문에, 귀속값을 아래와 같이 사용할 수 있습니다.이 예에서 설정된 모든 남성의 수입은 10000이다.
    $sex = 'M';
      $income = 10000;
      my $sth = $dbh->prepare("UPDATE TEST_TABLE
                               SET   INCOME = ?
                               WHERE SEX = ?");
      $sth->execute( $income, '$sex') or die $DBI::errstr;
      print "Number of rows updated :" + $sth->rows;
      $sth->finish();
    

    삭제 작업
    데이터베이스에서 기록을 삭제하려면 DELETE 작업이 필요합니다.다음 절차는 TEST 삭제TABLE의 모든 연령이 30이라는 기록.이 작업은 다음과 같은 조치를 취합니다.
  • 필요한 기준에 따라 SQL 쿼리를 준비합니다.이 작업에는 prepare() API가 사용됩니다.
  • SQL 조회를 수행하여 데이터베이스에서 삭제합니다.이 작업에는 execute() API가 사용됩니다.
  • 문장 손잡이를 방출한다.이 작업은finish() API
  • 를 사용할 것이다
  • 모든 것이 순조롭게 진행되면 이 조작을 제출해야 합니다. 그렇지 않으면 스크롤을 해서 일을 완성할 수 있습니다.
  •   $age = 30;
      my $sth = $dbh->prepare("DELETE FROM TEST_TABLE
                               WHERE AGE = ?");
      $sth->execute( $age ) or die $DBI::errstr;
      print "Number of rows deleted :" + $sth->rows;
      $sth->finish();
      $dbh->commit or die $DBI::errstr;
    

    도 문 사용
    UPDATE, INSERT, DELETE를 사용하고 있다면 데이터베이스에서 데이터를 되돌려 주지 않기 때문에 이 동작을 수행하는 지름길이 있습니다.도 문장에서 실행할 수 있는 명령을 사용할 수 있습니다.
    $dbh->do('DELETE FROM TEST_TABLE WHERE age =30');
    

    do는 실행에 성공하면false값을 되돌려줍니다.사실 성공하면 영향을 받은 줄 수를 되돌려줍니다.이 예에서 실제 삭제된 줄 수를 되돌려줍니다.
    제출 작업
    Commit는 데이터베이스를 조작하여 완성한 변화가 녹색 신호를 주는 것으로 이 조작 후 변화가 없으면 복구할 수 있다.
    다음은 commit API를 호출하는 간단한 예입니다.
    $dbh->commit or die $dbh->errstr;
    

    롤백 작업
    변경 사항에 만족하지 않을 경우 이러한 변경 사항을 복구하고 Rollback API.
    다음은 Rollback API를 호출하는 간단한 예입니다.
    $dbh->rollback or die $dbh->errstr;
    

    트랜잭션 시작
    많은 데이터베이스가 업무를 지원한다.이것은 수정할 데이터베이스에 대한 조회를 많이 할 수 있지만 실제로는 변화가 없다는 것을 의미한다.그리고 끝날 때 특수한 SQL 조회문구인 COMMIT를 보내고 모든 수정을 동시에 진행합니다.또는 질의 ROLLBACK을 보낼 수 있습니다. 이 경우 모든 질의가 무시됩니다.
    begin_work API는 다음에 commit이나 rollback을 호출할 때까지 사무를 닫아서 자동으로 제출합니다.COMMIT 또는 ROLLBACK이 있으면 자동 커밋이 자동으로 열립니다.
    $rc  = $dbh->begin_work   or die $dbh->errstr;
    

    자동 커밋 옵션
    만약 당신의 업무가 매우 간단하다면, 당신은 저장할 수 있으며, 많은 제출을 보낼 필요가 없다.연결이 호출되면, 자동 제출 옵션을 지정할 수 있으며, 자동 제출 작업을 실행한 후, 모든 성공적인 조회를 실행할 수 있습니다.여기 보면 다음과 같다.
    my $dbh = DBI->connect($dsn, $userid, $password,
                  {AutoCommit => 1}) 
                  or die $DBI::errstr;
    

    여기서 AutoCommit 값을 1 또는 0으로 설정합니다.
    자동 오류 처리
    연결이 호출되면 오류를 일으키는 옵션을 지정하여 자동으로 오류를 처리할 수 있습니다.오류가 발생하면 장애가 발생한 코드를 반환하는 대신 DBI에서 프로그램을 종료합니다.만약 당신이 프로그램의 오류를 중지하는 것을 원한다면, 이것은 편리할 수도 있습니다.여기 이렇게 보여요.
    my $dbh = DBI->connect($dsn, $userid, $password,
                  {RaiseError => 1})
                  or die $DBI::errstr;
    

    RaiseError 값은 1 또는 0일 수 있습니다.
    데이터베이스 링크 끊기
    데이터베이스 연결을 끊으려면 disconnect API. 사용
    $rc = $dbh->disconnect  or warn $dbh->errstr;
    

    이번 업무 행위와disconnect 방법은 확실하지 않습니다.일부 데이터베이스 시스템 (예: Oracle과 Ingres) 은 자동으로 모든 미완성 변경 사항을 제출하지만, 다른 일부 (예: Informix) 는 미완성 변경 사항을 되돌려줍니다.자동 제출을 사용하지 않는 프로그램은 커밋이나 롤백을 현저하게 호출한 다음 끊어야 합니다.

    좋은 웹페이지 즐겨찾기