#!/usr/bin/perl -w # Sample DBI program to create a new table and load data into it. # # Author: Kevin Stock (original oraperl script) # Date: 5th August 1991 # Date: 25th September 1992 use DBI; use strict; # Set trace level if '-# trace_level' option is given DBI->trace( shift ) if 1 < @ARGV && $ARGV[0] =~ /^-#/ && shift; die "syntax: $0 [-# trace] base user pass" if 3 > @ARGV; my ( $inst, $user, $pass ) = @ARGV; # Connect to database my $dbh = DBI->connect( "dbi:Oracle:$inst", $user, $pass, { AutoCommit => 0, RaiseError => 1, PrintError => 0 } ) or die $DBI::errstr; # set these as strings to make the code more readable my $CREATE = "CREATE TABLE tryit ( name VARCHAR2(10), ext NUMBER(3) )"; my $INSERT = "INSERT INTO tryit VALUES ( ?, ? )"; my $LIST = "SELECT * FROM tryit ORDER BY name"; my $DELETE = "DELETE FROM tryit WHERE name = ?"; my $DELETE_NULL = "DELETE FROM tryit WHERE name IS NULL"; my $DROP = "DROP TABLE tryit"; # Can use dynamic variables in write as long as they are visible at format time my ( $msg, $name, $ext ); # Prepare formats for output format STDOUT_TOP = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $msg Name Ext ==== === . format STDOUT = @<<<<<<<<< @>> $name, $ext . # function to list the table sub list { $msg = join "\n", @_; $- = 0; my $sth = $dbh->prepare( $LIST ); $sth->execute; $sth->bind_columns( {}, \( $name, $ext ) ); while ( $sth->fetch ) { $name = '' unless defined $name; $ext = '' unless defined $ext; write; } $sth->finish; } # create the database $dbh->do( $CREATE ); # put some data into it my $sth = $dbh->prepare( $INSERT ); while ( ) { chomp; $sth->execute( map { 'NULL' eq $_ ? undef : $_ } split /:/, $_, 2 ); } $dbh->commit; list( 'Initial Data' ); # remove a few rows $sth = $dbh->prepare( $DELETE ); foreach $name ( 'catherine', 'angela', 'arnold', 'julia' ) { $sth->execute( $name ); } $dbh->commit; list( 'After removing selected people' ); # Remove some rows with NULLs $dbh->do( $DELETE_NULL ); list( 'After removing NULL names' ); # remove the table and disconnect $dbh->do( $DROP ); $dbh->disconnect; # This is the data which will go into the table __END__ julia:292 angela:208 NULL:999 larry:424 catherine:201 nonumber:NULL randal:306 arnold:305 NULL:NULL