File : test.adb
with
Text_IO,
Ada.Integer_Text_IO,
Ada.Long_Float_Text_IO,
Oci.Thick,
OCI.Thick.Integer_Var,
OCI.Thick.OCIDate_Var,
OCI.Thick.Long_Float_Var,
OCI.Thick.OCINumber_Var,
OCI.Thick.String_Var,
OCI.Thick.String_Bounded,
OCI.Thick.Connection_pkg,
OCI.Thick.Statement_pkg,
OCI.Thick.Parameter_pkg,
OCI.Thread,
OCI.Thick.Number_Functions;
procedure Test is
use Text_IO, Oci.Thick;
use
Ada.Integer_Text_IO,
Ada.Long_Float_Text_IO,
Long_Float_Var,
Integer_Var,
String_Bounded,
OCIDate_Var,
OCINumber_Var,
String_Var,
Connection_pkg,
Statement_pkg,
Parameter_pkg,
OCI.Thread,
Number_Functions;
procedure Main is
Strv : String_Var.VString;
strb : String_Bounded.Variable(64);
Int : Integer_Var.Variable;
Flt : Long_Float_Var.Variable;
Numb : OCINumber_Var.Variable;
Date : OCIDate_Var.Variable;
Param : Parameter;
Stmt : Statement;
Connect : Connection;
onumb1,onumb2 : OCINumber;
aflt : Long_Float;
NULL_descr : array (boolean) of String(1..8) := (false => "NOT NULL",TRUE => " NULL");
begin
Connect := Logon("scott/tiger@eforex.world");
put_line(Server_Version(Connect));
Stmt := Prepare(Connect, "select object_name,"&
"timestamp, OBJECT_ID,"&
"sysdate-created, sysdate-Last_ddl_Time, Last_ddl_Time "&
"from user_objects where object_type=:objtype and object_id>:id");
Set_Value(strb, "TABLE");
Bind(Stmt,Strb,"objtype");
Set_Value(int, 2);
Bind(Stmt,int, 2);
Execute(Stmt);
declare
Columns : Parameters := Get_Parameters(Stmt);
begin
for i in Columns'Range loop
Set_Col(01); Put(Name(Columns(i)));
Set_Col(25); Put(Typecode'Image(Type_Code(Columns(i))));
Set_Col(38); Put(Type_Name(Columns(i)));
Set_Col(40); Put(Integer'Image(Data_Size(Columns(i))));
Set_Col(45); Put(Integer'Image(Precision(Columns(i))));
Set_Col(50); Put(Integer'Image(Scale(Columns(i))));
Set_Col(55); Put(NULL_DEscr(Is_Null(Columns(i))));
Set_Col(65); Put(Schema_Name(Columns(i)));
end loop;
Param := Columns(1);
end;
Define(Stmt,Strv,1);
Define(Stmt,strb,2);
Define(Stmt,Int,3);
Define(Stmt,Flt,4);
Define(Stmt,Numb,5);
Define(Stmt,Date,6);
for i in 1..4 loop
exit when not Fetch(Stmt);
Set_Col(1); Put(Get_Value(Strv));
Set_Col(16); Put(Get_Value(Strb));
Set_Col(35); Put(Get_Value(Int),Width=>6);
Set_Col(42); Put(Get_Value(Flt),Aft => 3,Exp=>0);
Set_Col(50); Put(To_String(Get_Value(Numb),"FM999990.99999"));
Set_Col(60); Put(To_String(Get_Value(Date),"DD Mon RRRR HH24:MI:SS"));
end loop;
Set_Col(1);
Stmt := Prepare(Connect, "begin :result := (sysdate - :client_time)*60*60*24; end;");
Bind(Stmt,Numb,":result");
Bind(Stmt,Date,":client_time");
Set_Value(Date,Sysdate); -- client local time
Put_Line("Client time : "&To_String(Get_Value(Date),"Day Ddspth Month Yyyyspth HH24:MI:SS"));
Execute(Stmt);
Put_Line("Time difference : "&To_String(Get_Value(Numb),"FM999990.099")&" seconds");
oNumb1 := Get_Value(Numb);
oNumb2 := abs(onumb1);
put("Time difference : ");
Put_Line(To_String(onumb1,"FM999990.099")&" seconds");
Put_Line(To_String(To_Number(To_Long_Float(-onumb2)),"FM9999999.099999"));
Put_Line(To_String(onumb2,"FM999990.099"));
Put_Line(To_String(ArcTan2(onumb1,onumb2),"FM999990.099"));
end Main;
-- remove comments below to check multitasking
-- task type Parallel is
-- entry Start;
-- end Parallel;
-- task body Parallel is
-- begin
-- accept start;
-- Main;
-- end Parallel;
-- p : array (1..4) of parallel;
---------------------------------------
begin
-- Same_Environment_In(p(1)'Identity,p(2)'Identity);
-- Same_Environment_In(p(2)'Identity);
-- for i in p'Range loop
-- p(i).Start;
-- end loop;
Main;
end Test