pro第一天

本文深入探讨了在过程化编程语言中嵌入SQL语句的方法,包括C语言与PROC程序的实现步骤,预编译选项的使用,以及宿主变量的管理。重点介绍了SQL语句在宿主语言中的应用,如变量声明、数组处理、指示变量的使用等,并提供了宿主语言与数据库通信区的详细说明。同时,文章指导如何在PROC中调用存储过程和函数,以及如何通过ORACA通信区优化程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   pro程序:
   在过程化的编程语言中嵌入sql语句开发出的应用程序
   proc 程序
   在c语言中嵌入sql语句开发出的应用程序  
   宿主语言:sql嵌入的语言 
    
   c程序的编程步骤:
   1.写c的源代码
   2.编译
   3.链接
   4.执行
   proc 程序的编程步骤:
   0 写pc的源代码
   1.预编译 生成 c
   2.编译
   3.链接
   4.执行
   proc的预编译选项:
   include   指定头文件的位置
   iname     输入文件名   可以省略
   oname     默认是c
             做c++需要指定 oname=***.cpp
   parse     full  默认的c方式
             partia 严格的c++检查  不推荐使用 
             none   c++ 推荐的使用方式


   code      ansi_c   默认的c风格
             cpp      c++ 
   
   
  






   源代码写好以后  使用ftp 把代码上传到服务器


   proc 指定头文件的位置 
   需要使用预编译选项
   proc   ***.pc    include='头文件位置' 
   stddef.h
  /usr/lib/gcc-lib/i386-redhat-linux7/2.96/include    
   本地生成c文件   
   proc  first.pc  include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'


   本地没有安装oracle  
   链接时需要使用oracle的库  clntsh
   gcc   first.c  -lclntsh 




   proc的预编译选项:
   include   头文件定位的问题
    proc  first.pc  include='/usr/lib/gcc-lib/i386-redhat-linux7/2.96/include'
   iname    输入的文件名是哪一个   这个可以省略
    proc  iname=first.pc 
   oname    输出文件名   默认是c文件
            如果做c++开发 则需要指定输出文件名 **.cpp
   parse  解析方式  默认full  是c语言的
          partia  严格的c++检查 不推荐使用
          none    在c++中推荐使用
   code   ansi_c   默认的c方式
          cpp      c++中使用 
   
   补充:如果在proc代码中调用plsql 则需要下面的选项
   sqlcheck=semantics  
   userid=指定的用户名/密码 


   按照上面的选项做一个c++ 代码
   
   在c++ 中 所有的在sql语句中使用的变量 都要定义在
   申明区  
   exec sql  begin declare section;
       /*这是申明区*/
   exec sql  end   declare section; 
   预编译c++文件
   proc second.pc oname=second.cpp parse=none  code=cpp
   上传到服务器编译链接 
   g++  second.cpp  -lclntsh
   
   宿主变量:
   既能在sql语句中使用 又能在宿主语言中使用的变量  
   c++规定 必须把这种变量的定义放在申明区 
   c中可以不放在申明区(windows 下即使是proc也需要
   把宿主变量放在申明区)  
   推荐以后不管是proc还是proc++都要把宿主变量放在申明区
   在sql语句中使用宿主变量时  变量前要加冒号


   宿主语言中的变量类型:
   char  
   char   par[n]   定长字符串
   short 
   int 
   long 
   float
   double 
   varchar par[n]   变长字符串
    
   变长字符串的处理:
   变长字符串
   在sql语句中  :变量名
   在c中 要     变量名.arr  
   记得要初始化
   
   还有一种变长字符串的处理方式
   可以使用proc的预编译选项 
   char_map=charz   定长  \0结尾   空格补齐
           =charf  varchar  定长   空格补齐
           =string  变长  \0结尾    (动作太大)    


   proc  ***.pc  char_map=string
   gcc **.c  -lclntsh


   宿主变量的使用注意事项:
   1.推荐宿主变量放在申明区 
   2.可以使用指针  但使用前要分配空间
     不能使用堆分配 
   3.ddl 不能不能包含宿主变量(不能有冒号)
     proc 中可以使用ddl(create   drop  alter)
     plsql 中不能直接使用ddl
   
     exec sql  create table  test(id  number);
     exec sql  create table  :test(id  number);//error
  
     指示变量:指示数据表中的字段值赋值给宿主变量时的 
赋值状态 
     指示变量的值有三种情况:
     a  ==0   赋值正常
     b  ==-1  可以断定数据库中的字段值是NULL值
     c  >0    数据库中的字段值截断之后赋值给宿主变量
     指示变量的用法:
     exec sql select *** into :宿主变量 indicator :指示变量   from  ***  where ***;
     exec sql select *** into :宿主变量:指示变量   from  ***  where ***;
     指示变量 能且只能是short类型
     
    数组变量:
    1.只支持一维数组  字符除外 
    2.不支持数组指针
    3.最大  32767  超出报错
     
    使用数组时  只需要给出:数组名  不需要给出下标
     
    /*把s_emp 表中所有的记录值 放入数组中
      first_name    salary */     
    exec sql select first_name,salary  into  :名字数组,
 :薪水数组    from s_emp;


     数组的使用:
     1.出了字符外 都只支持一维数组
     2.不支持数组指针
     3.最大下标数 32767 
         
     sql中使用数组 不能给出下标  
     指示器数组:
     如果需要指示多个数据的赋值状态 可以使用 指示器数组
     
       
     sql的通信区:
     exec sql  include sqlca;
     宿主语言和数据库做通信使用的一个结构体  
     sqlca.sqlerrd[2]  sql语句影响的行数  
     sqlca.sqlcode     最近sql执行的状态
     ==0   sql 语句执行正常
     >0    异常发生
     <0    网络  或者数据库本身的问题   
     sqlca.sqlerrm.sqlerrmc  sql语句执行出错之后错误原因   
     oraca   通信区
     对sqlca的补充
     根据条件输出程序中sql语句 
     默认是关闭的  非常耗资源 
        
     a.包含oraca通信区
        exec sql include oraca;
     b.打开oraca通信区  
        exec  oracle  option(oraca=yes);
     c.根据需求 设置sql的标志
        oraca.orastxtf 
        0   不保存sql语句  默认
        1   sql语句出现警告 就保存
        2   sql语句出错 或者警告时保存
        3   无论什么情况 都保存
     d. 输出sql 语句
        oraca.orastxt.orastxtc


   select first_name into :b0  from s_emp where id=:b1
   
   printf("%d:%s",,);
 --------------------------------------------------
   proc 中如何嵌入sql语句
   1.select 语句要和 into  结合使用 
   2.dml  ddl  事务控制 都可以直接使用  
   3.所有的语句前要加 exec sql  


-----------------------------------------------
   在proc 中如何调用存储过程和函数
  
  








   
       








        








 














   
  
     




















 




 




































































 
  
      
   








   
  
   



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值