C#调用Oracle PL/SQL匿名块

7 篇文章 0 订阅

1. SCOTT工资3000,如果表中有记录将工资上涨到10000,如果没有,将插入新的记录到表中!

 2.附上C#代码,SQL语法嵌入到C#代码里面

            OracleConnection connect=new OracleConnection("Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME =superdog)));User Id =scott; Password=today0925");
            connect.Open();
            OracleCommand command=connect.CreateCommand();
            string ename = "SCOTT";
            double sal = 10000;
            string sqlStr = $@"DECLARE
                               v_ename VARCHAR2(35):='{ename}';-- 员工名
                               v_sal NUMBER(5):={sal};-- 工资
                               v_count NUMBER(5);-- 记录数
                               BEGIN
                               SELECT count(*) INTO v_count FROM emp WHERE ename=v_ename;
                               IF v_count>0 THEN
                               UPDATE emp 
                               SET sal=v_sal
                               WHERE ename=v_ename;
                               ELSE
                               INSERT INTO emp
                               (empno,ename,job,mgr,hiredate,sal,deptno)
                               VALUES (7788,v_ename,'ANALYST',7566,TO_DATE('1987-04-19','yyyy-MM-dd'),v_sal,20);
                               END IF;
                               END;";
            command.CommandText = sqlStr;
            command.CommandType = System.Data.CommandType.Text;
            command.ExecuteNonQuery();

 3. 程序执行过后,SCOTT工资上涨到10000,老板要哭了,人工成本增加

 

4. 这样做的目的一是减少对数据库的查询,二是方便问题的排查,SQL简单明了 

C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,2); begin select avg(price) into dig from products; dbms_output.put_line('电子产品的平均价格是'||dig); end; --PL/SQL基础3 根据产品编号获得产品对象 --pname products.name%type; pname变量的类型与products.name列的类型一样 declare pid constant products.id%type:=1; --定义常量,初值1 pname products.name%type; pdate products.adddate%type; begin --pid:=1; select name,adddate into pname,pdate from products where id=pid; dbms_output.put_line('产品名称是:'||pname||',日期'||pdate); end; --PL/SQL基础4 根据产品编号获得产品对象 --obj products%rowtype; obj与products表的单行类型一样,可以通过点运算取值obj.price declare obj products%rowtype; begin select * into obj from products where id=&编号; dbms_output.put_line('产品名称是:'||obj.name||',价格:'||obj.price); end; --PL/SQL基础5 条件if declare vid products.id%type; vprice products.price%type; begin vid:=&编号; select price into vprice from products where id=vid; if vprice100 and vprice<=1000 then dbms_output.put_line('价格在100—1000之间'); else dbms_output.put_line('价格在1000以上'); end if; end; --PL/SQL基础5 多条件case begin case '&等级' when 'A' then dbms_output.put_line('优秀'); when 'B' then dbms_output.put_line('合格'); when 'C' then dbms_output.put_line('不合格'); end case; end; select id, name, typeid, price, adddate from products create table students( Id int primary key, sex int ) insert into students select 1,1 from dual union select 2,0 from dual union select 3,1 from dual union select 4,0 from dual union select 5,1 from dual insert into students(Id) values(6) select * from students; select translate(translate('1心1意 3心2意','1','一'),'3','三') from dual; select id,nvl(translate(translate(sex,1,'女'),0,'男'),'未知') from students; select id,case as 性别 from( sele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值