⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testaorasql.pas

📁 delphi通过OCI访问ORACLE
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit testAOraSQL;

{$INCLUDE dOCI.inc}

interface
uses
 SysUtils, Dialogs, TestFrameWork, DB, ADataSet, OraDB, AOraSQL;

type
 TTestAOraSQL = class(TTestCase)
 private
   DB:TOraDB;
   SQL:TAOraSQL;
   procedure fillTestTable;
 protected
   procedure SetUp; override;
   procedure TearDown; override;
 published
   procedure testAOraSQLFetch1;
   procedure testAOraSQLFetch2;
   procedure testAOraSQLFetch3;
   procedure testAOraSQLFetch4;
   procedure testAOraSQLFetch5;
   procedure testAOraSQLFetch6;

   procedure testAOraSQLOpen11;
   procedure testAOraSQLOpen12;
   procedure testAOraSQLOpen13;
   procedure testAOraSQLOpen14;
   procedure testAOraSQLOpen15;

   procedure testAOraSQLUpdateWithNull;
   procedure testAOraSQLInsertBLOB;
   procedure testAOraSQLSQLType;
   procedure testAOraSQLPrepare;

   procedure testAOraSQLGianpaoloGasparini;
   procedure testAOraSQLManyDataTypes;
   procedure testAOraSQLPrevNext;
   procedure testAOraSQLUniDirectonal1;
   procedure testAOraSQLUniDirectonal2;
   procedure testManyInsertsInOneQuery;

   procedure testAOraSQLReadBlobAsParamEmpty;
   procedure testAOraSQLReadBlobAsParam;

   procedure testAOraSQLRawDataType;
   procedure testAOraSQLUpdateRawData;
   procedure testAOraSQLSelectNULL;
   procedure testAOraSQLInsertLargeCLOB;
end;


implementation

uses OraError;

procedure TTestAOraSQL.SetUp;
begin
 DB  := TOraDB.Create(nil);
 DB.DBLogin := 'test';
 DB.DBPassword := 'a';
 DB.DBServer := 'RRR';
 DB.LoginPrompt := False;

 SQL := TAOraSQL.Create(nil);
 SQL.Database := DB;
 SQL.Name := 'SQL';
end;

procedure TTestAOraSQL.TearDown;
begin
// DB.Free;
// SQL.Free;
end;

procedure TTestAOraSQL.testAOraSQLFetch1;
begin
 try
  SQL.Fetch;
 except
  on E:Exception do
   CheckEquals('TAOraSQL ''SQL'' is not active !', E.Message);
 end;
end;

procedure TTestAOraSQL.testAOraSQLFetch2;
begin
 try
  SQL.SetQuery('select * from test');
  SQL.Fetch;
 except
  on E:Exception do
   CheckEquals('TAOraSQL ''SQL'' is not active !', E.Message);
 end;
end;

procedure TTestAOraSQL.testAOraSQLFetch3;
begin
 try
  SQL.SetQuery('select * from test');
  SQL.LoadFields;
  SQL.Fetch;
 except
  on E:Exception do
   CheckEquals('TAOraSQL ''SQL'' is not active !', E.Message);
 end;
end;

procedure TTestAOraSQL.testAOraSQLFetch4;
begin
 try
  SQL.SetQuery('select * from test');
  SQL.Open;
  SQL.Fetch;
 except
  on E:EDatabaseError do
   CheckEquals('Oracle Error ORA-24374: define not done before fetch or execute and fetch'#$A, E.Message);
 end;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLFetch5;
begin
 SQL.SetQuery('select * from test');
 SQL.LoadFields;
 SQL.Open;
 SQL.ReadAll;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLFetch6;
begin
 SQL.SetQuery('select * from test');
 SQL.LoadFields;
 SQL.OpenAll;

 FreeAndNil(SQL);
end;


procedure TTestAOraSQL.testAOraSQLOpen11;
begin
 try
  SQL.Open;
 except
  on E:EDatabaseError do
   CheckEquals('SQL: No SQL statement available.', E.Message);
 end;
end;

procedure TTestAOraSQL.testAOraSQLOpen12;
begin
 SQL.SetQuery('select * from test');
 SQL.Open;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLOpen13;
begin
 SQL.SetQuery('select * from test');
 SQL.LoadFields;
 SQL.Open;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLOpen14;
begin
 try
  SQL.SetQuery('select * from test');
  SQL.ReadAll;
 except
  on E:Exception do
   CheckEquals('TAOraSQL ''SQL'' is not active !', E.Message);
 end;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLOpen15;
begin
 try
  SQL.SetQuery('select * from test');
  SQL.LoadFields;
  SQL.ReadAll;
 except
  on E:Exception do
   CheckEquals('TAOraSQL ''SQL'' is not active !', E.Message);
 end;

 FreeAndNil(SQL);
end;


procedure TTestAOraSQL.testAOraSQLUpdateWithNull;
begin
  SQL.SetQuery('update test set F3 = :F3 where F3 is null ');
  SQL.AddParam('F3', ftoString, ptoInput);
//  SQL.AddParam('oF3', ftoString, ptoInput);
  SQL.ParamByName['F3'].AsString := '0000000';
  //SQL.ParamByName['oF3'].AsString := '';
  SQL.ExecSQL;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLInsertBLOB;
var i:Integer;
begin
//  SQL.SetQuery('insert into test3 (F1, F3) values(3, EMPTY_BLOB())');
//  SQL.ExecSQL;

  SQL.SetQuery('select F1, F3 from test3 ');
//  SQL.AddField('F1', ftoString, 100, False);
//  SQL.AddField('F3', ftoBLOB, 0, False);
  SQL.LoadFields;
  SQL.OpenAll;

  i := SQL.RecordCount;

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLSQLType;
begin
 SQL.SetQuery('select F1, F3 from test ');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stSelect = SQL.SQLType);

 SQL.SetQuery('update test set F1=''aa'', F3=5');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stUpdate = SQL.SQLType);

 SQL.SetQuery('delete from test');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stDelete = SQL.SQLType);

 SQL.SetQuery('insert into test values() ');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stInsert = SQL.SQLType);

 SQL.SetQuery('CREATE TABLE CUSTOMER(CUSTNO NUMBER NOT NULL,COMPANY VARCHAR2(30) NOT NULL)');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stCreate = SQL.SQLType);

 SQL.SetQuery('drop table test');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stDrop = SQL.SQLType);

 SQL.SetQuery('ALTER TABLE AA ADD("C" VARCHAR2(10) NOT NULL, "G" VARCHAR2(10) NOT NULL)');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stAlter = SQL.SQLType);

{ SQL.SetQuery('');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stBegin = SQL.SQLType);

 SQL.SetQuery('');
 Check(stUnknown = SQL.SQLType);
 SQL.Prepare;
 Check(stDeclare = SQL.SQLType);
}

 FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLPrepare;
begin
  SQL.SetQuery('select * from test ');

  Check(not SQL.Prepared);
  SQL.Prepare;
  Check(SQL.Prepared);
  SQL.Prepare;
  Check(SQL.Prepared);
  SQL.UnPrepare;
  Check(not SQL.Prepared);
  SQL.UnPrepare;
  Check(not SQL.Prepared);
  SQL.Prepare;
  Check(SQL.Prepared);
  SQL.UnPrepare;
  Check(not SQL.Prepared);

  FreeAndNil(SQL);
end;

//Gianpaolo Gasparini <gasparini@semtec.it>
procedure TTestAOraSQL.testAOraSQLGianpaoloGasparini;
begin
  SQL.SetQuery('select test.*,rowID from test');
  SQL.LoadFields();
  SQL.OpenAll;

  CheckEquals(5, SQL.RecordCount);

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testAOraSQLManyDataTypes;
begin
  SQL.SetQuery('delete from test3');
  SQL.ExecSQL;
 // SQL.Database.CommitTransaction;


  SQL.SetQuery('select * from test3');
  SQL.LoadFields();

  CheckEquals(15, SQL.FieldCount);

  SQL.OpenAll;

  CheckEquals(0, SQL.RecordCount);

  FreeAndNil(SQL);
end;

procedure TTestAOraSQL.testManyInsertsInOneQuery;
begin
//  SQL.SetQuery('DELETE FROM TEST');
//  SQL.ExecSQL;

  SQL.SetQuery(
   'BEGIN '+
   'INSERT INTO TEST4(F1, F2) VALUES(1234.7878, 0.0000000000000000006); '+
   'INSERT INTO TEST4(F1, F2) VALUES(1111.7878, 0.0000000000000000006); '+
   'END;'
    );
  SQL.ExecSQL;
  DB.CommitTransaction;
end;


procedure TTestAOraSQL.fillTestTable;
begin
  SQL.SetQuery('DELETE FROM TEST');
  SQL.ExecSQL;

  SQL.SetQuery(
   'BEGIN '+
   'INSERT INTO TEST(F1, F2, F3, F4, F5, F6) VALUES(''kkkkkkkkkk'', 77777.7878, ''one'', 12121212121212121212,0,0.0000000000000000006);'+
   'INSERT INTO TEST(F1, F2, F3, F4, F5, F6) VALUES(''qqqqqqqqqq'', 77777.7878, ''two'', 12121212121212121212,1,0.0000000000000000006);'+
   'INSERT INTO TEST(F1, F2, F3, F4, F5, F6) VALUES(''cccccccccc'', 77777.7878, ''three'', 12121212121212121212,2,0.0000000000000000006);'+
   'INSERT INTO TEST(F1, F2, F3, F4, F5, F6) VALUES(''gggggggggg'', 77777.7878, ''four'', 12121212121212121212,3,0.0000000000000000006);'+
   'INSERT INTO TEST(F1, F2, F3, F4, F5, F6) VALUES(''iiiiiiiiii'', 77777.7878, ''five'', 12121212121212121212,4,0.0000000000000000006);'+
   'END;'
  );
  SQL.ExecSQL;
  DB.CommitTransaction;
end;

procedure TTestAOraSQL.testAOraSQLPrevNext;
begin
  // filling table with test data
  fillTestTable;

  SQL.SetQuery('select * from test order by f5');
  SQL.FetchCount := 1;
  SQL.LoadFields;
  CheckEquals(6, SQL.FieldCount);

  SQL.Open;

  CheckEquals(-1, SQL.CurrentRecord);
  CheckEquals(0, SQL.RecordCount);
  CheckEquals(False, SQL.EOF);

  SQL.Next;
  CheckEquals(False, SQL.EOF);
  CheckEquals(1, SQL.RecordCount);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -