PL/sql_Proc*C简单语法
来源:互联网 发布:网络代写兼职 编辑:程序博客网 时间:2024/05/21 06:32
--------PL/SQL--oracle--组成 EXEC SQL sqlstatements; --数据段中的变量在由 :变量名 --...表示其他代码--[]{}表示一起出现--|表示多选一#undef SQLCAEXEC SQL INCLUDE SQLCA;/*通用区说明*/--*****************************************************--*****************************************************EXEC SQL BEGIN DECLARE SECTION;--数据段host variableVARCHAR varUser[20+1];VARCHAR varPswd[20+1];VARCHAR varDB[20+1];--在EXEC和C中均可使用的变量,且使用时候--C中 变量名 varname--EXEC SQL 冒号+变量名 :varnameEXEC SQL END DECLARE SECTION;--数据段--*****************************************************--*****************************************************VARCHAR username[20];/*host variable*/struct /*C中自己定义,*/{ unsigned short len; unsigned char arr[20]; } username; --*****************************************************--*****************************************************--连接数据库,用户名,密码,数据库名要在数据段内定义声明--http://docs.oracle.com/cd/B28359_01/appdev.111/b28427/pc_11thr.htm#i1000591---------------------------------------EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd | :usr_psw } [[ AT { dbname | :host_variable }] USING :connect_string ] [ {ALTER AUTHORIZATION :newpswd | IN { SYSDBA | SYSOPER } MODE} ] ;---------------------------------------远程主机地址 AT { dbname | :host_variable }--EXEC SQL CONNECT :username IDENTIFIED BY :password ; ----------------------------------------EXEC SQL CONNECT :usr_pwd; EXEC SQL CONNECT :用户名 IDENTIFIED BY :密码 USING :数据库名--*****************************************************--*****************************************************--PL/SQL BlocksEXEC SQL AT :db_name EXECUTE begin /* PL/SQL block here */ end;END-EXEC;--*****************************************************--*****************************************************--多线程SQL执行文档--变量sql_context <context_variable>;--EXEC SQL ENABLE THREADS;--EXEC SQL CONTEXT ALLOCATE :context_var;--EXEC SQL CONTEXT USE { :context_var | DEFAULT};--EXEC SQL CONTEXT FREE :context_var;main() { sql_context ctx1,ctx2; /* declare runtime contexts 定义声明文本变量*/ EXEC SQL ENABLE THREADS;--多个线程需要此句 EXEC SQL CONTEXT ALLOCATE :ctx1;--分配文本空间ctx1 EXEC SQL CONTEXT ALLOCATE :ctx2;--分配文本空间ctx2 .../* spawn thread, execute function1 (in the thread) passing ctx1 *创建线程,在此线程内通过文件ctx1执行句柄函数function1*/ thread_create(..., function1, ctx1); /* spawn thread, execute function2 (in the thread) passing ctx2 *创建线程,在此线程内通过文件ctx2执行句柄函数function2*/ thread_create(..., function2, ctx2); ... EXEC SQL CONTEXT FREE :ctx1;--释放 EXEC SQL CONTEXT FREE :ctx2; ...}void function1(sql_context ctx){ EXEC SQL CONTEXT USE :ctx;/* execute executable SQL statements on runtime context ctx1!!! *在ctx1运行环境下执行可执行SQL语句*/ ...} void function2(sql_context ctx) { EXEC SQL CONTEXT USE :ctx;/* execute executable SQL statements on runtime context ctx2!!! **在ctx2运行环境下执行可执行SQL语句*/ ...}--*****************************************************--*****************************************************--查询语句,查询结果存放在数据段的dept_name变量中,可在C部分使用EXEC SQL SELECT DNAME INTO :dept_name FROM DEPT WHERE DEPTNO= :dept_number;------------查询数据并判断是不是NULLEXEC SQL SELECT ename, sal, comm INTO :emp_name, :salary, :commission:ind_comm FROM emp WHERE empno = :emp_number; if (ind_comm == -1) pay = salary; /* commission is NULL; ignore it */ else pay = salary + commission;-------------比较是否相等包括NULLEXEC SQL SELECT ename, sal INTO :emp_name, :salary FROM emp WHERE (comm = :commission) OR ((comm IS NULL) AND (:commission INDICATOR :ind_comm IS NULL)); --*****************************************************--*****************************************************--插入语句,数据段的emp_name变量,可在C部分使用strncpy(emp_name, "MILLER ", 10); /* 4 trailing blanks */ EXEC SQL INSERT INTO emp (empno, ename, deptno) VALUES (1234, :emp_name, 20); ------------如果要插入NULL,1直接NULL,2set为-1,3ind_empnum=-1标识插入NULLEXEC SQL INSERT INTO emp (empno, comm) VALUES (:emp_number, NULL); -----------------set ind_comm = -1; EXEC SQL INSERT INTO emp (empno, comm) VALUES (:emp_number, :commission:ind_comm); -------------------if (emp_number == 0) ind_empnum = -1; else ind_empnum = 0; EXEC SQL INSERT INTO emp (empno, sal) VALUES (:emp_number:ind_empnum, :salary); --*****************************************************--*****************************************************--更新语句,数据段的loblen, blob,key;变量,可在C部分使用EXEC SQL UPDATE executables SET length = :loblen, binary = :blob WHERE name = :key;--*****************************************************--*****************************************************--删除语句,数据段的key;变量,可在C部分使用EXEC SQL DELETE FROM executables WHERE name = :key;--*****************************************************--*****************************************************--游标控制Cursor ControlEXEC SQL AT :db_name DECLARE emp_cursor CURSOR FOR ... /*定义声明游标*/EXEC SQL OPEN emp_cursor ... /*执行sql,且游标标志第一条数据,此前db_name可变,后不可*/EXEC SQL FETCH emp_cursor ... /*取下一条数据*/EXEC SQL CLOSE emp_cursor;/*关闭游标*/-------------------------------------EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ename, job, sal FROM emp WHERE deptno = 20; ------------------------------------- .../* define a cursor */ EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ename, job FROM emp WHERE empno = :emp_number FOR UPDATE OF job; /* open the cursor and identify the active set */ EXEC SQL OPEN emp_cursor; /* break if the last row was already fetched */ EXEC SQL WHENEVER NOT FOUND DO break; --EXEC SQL WHENEVER NOT FOUND GOTO ... /* fetch and process data in a loop */ for (;;) { EXEC SQL FETCH emp_cursor INTO :emp_name, :job_title; /* optional host-language statements that operate on the FETCHed data */ EXEC SQL UPDATE emp SET job = :new_job_title WHERE CURRENT OF emp_cursor; } ... /* disable the cursor */ EXEC SQL CLOSE emp_cursor; EXEC SQL COMMIT WORK RELEASE; ... --*****************************************************--*****************************************************
0 0
- PL/sql_Proc*C简单语法
- ORACLE之PL/SQL简单基础语法学习(一)
- ORACLE之PL/SQL简单基础语法学习(二)
- object c语法简单总结
- Objectiv-C语法简单概述
- C++--简单类模板语法
- PL/SQL语法部分
- PL/SQL语法
- pl-sql语法
- pl/sql基础语法
- pl/sql语法
- Oracle PL/SQL语法
- Oracle PL/SQL 语法
- pl/sql语法手册
- pl/sql_3_语法
- pl/sql基本语法
- PL/sql语法_to_date
- PL/SQL基础语法
- cadence schematic导出原理图的方法
- 获取下拉框文本的值
- leetcode:greedy:Create Maximum Number(321)
- 【华为OJ】表示数字
- [20] Vijos P1737 选择客栈(动态规划,方案数)
- PL/sql_Proc*C简单语法
- 模板设计模式
- select赋值和取值
- Alpha-Beta剪枝算法(Alpha Beta Pruning)
- 负数转换为二进制的表达(原码,反码,补码)
- 建议35:使用default为泛型类型变量指定初始值
- 获取SHA1或者MD5
- 代码笔记 | TCP网络协议编程实现
- leetcode:greedy:Patching Array(330)