精华内容
下载资源
问答
  • 由于最近的工作基本都是在与shell和存储过程打交道,任何任务的开始都是以shell脚本开始,之前的任务是通过shell并行执行,后续的任务依赖于并行的任务是否执行完毕,下一个shell如果获取并行任务是否结束成为了一个...

    由于最近的工作基本都是在与shell和存储过程打交道,任何任务的开始都是以shell脚本开始,之前的任务是通过shell并行执行,后续的任务依赖于并行的任务是否执行完毕,下一个shell如果获取并行任务是否结束成为了一个难题,最后采取如下方案:

    1、每一个并行执行的任务完成之后都写入对应数据的成功标志

    2、下一个任务shell脚本每隔一段时间执行一次,判断是否所有标志都为成功,如果成功,执行该shell,于是就需要shell从数据库中获取是否都执行成功的标志。

    写了一个oracle存储过程来获取标志

    create or replaceprocedure p_getstatus(status out number) as .....;

    然后通过shell脚本获取存储过程的返回值,纠结了好长时间,shell脚本大致如下:

    #!/bin/bash

    value=`sqlplus -S  username/password <

    set pagesize 0;

    set feedback off;

    set verify off;

    set heading off;

    set echo off;

    var policyflag number;

    execute  p_getstatus(:flag);

    select :flag from dual;

    exit;

    EOF`

    echo $value

    if [ $value == 1 ]; then

    else

    fi

    终于搞定,脚本特殊说明以下两点

    1、sqlplus 命令必须使用 -S 参数,该参数会过滤掉sqlplus的所有输出,包括与数据库连接成功,断开连接,查询结果等.

    2、过程包含输出参数status,需要通过select :flag from dual;将查询结果输出到value变量中。

    其实,shell变量和sqlplus 变量处于两种不同的环境,无法直接赋值,将sqlplus的所有输出结果都过滤掉,只保留用户需要的字符串返回给shell环境,作为一个字符串赋值给shell变量。

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7483882/viewspace-1064671/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • /// /// 执行存储过程,返回" 返回值"/// /// 存储过程名/// 存储过程参数/// 执行存储过程返回值public static int RunProcedureWithReturn(string storedProcName, IDataParameter[] parameters){using ...

    废话不多说,直接给大家贴C#代码了。

    ///

    /// 执行存储过程,返回" 返回值"

    ///

    /// 存储过程名

    /// 存储过程参数

    /// 执行存储过程的返回值

    public static int RunProcedureWithReturn(string storedProcName, IDataParameter[] parameters)

    {

    using (SqlConnection connection = new SqlConnection(connectionString))

    {

    int result;

    connection.Open();

    SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);

    command.ExecuteNonQuery();

    result = (int)command.Parameters["ReturnValue"].Value;

    //Connection.Close();

    return result;

    }

    }

    ///

    /// 创建 SqlCommand 对象实例(用来返回一个整数值)

    ///

    /// 存储过程名

    /// 存储过程参数

    /// SqlCommand 对象实例

    private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)

    {

    SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);

    command.Parameters.Add(new SqlParameter("ReturnValue",

    SqlDbType.Int, 4, ParameterDirection.ReturnValue,

    false, 0, 0, string.Empty, DataRowVersion.Default, null));

    return command;

    }

    ps:在C#中调用存储过程中的两种返回值

    //存储过程

    //create proc authors_count @outrus int output

    //as

    //declare @authors int

    //select @authors=count(*) from authors

    //set @outrus=@authors

    //return @authors

    System.Data.SqlClient.SqlConnection sqlcon=new System.Data.SqlClient.SqlConnection("server=(local);database=pubs;uid=sa;pwd=;");

    System.Data.SqlClient.SqlCommand sqlcmd=new System.Data.SqlClient.SqlCommand("authors_count",sqlcon);

    sqlcmd.CommandType=System.Data.CommandType.StoredProcedure;

    // sqlcmd.CommandText="authors_count";

    // sqlcmd.Connection=sqlcon;

    sqlcmd.Parameters.Add("@rus",System.Data.SqlDbType.Int);

    sqlcmd.Parameters.Add("@outrus",System.Data.SqlDbType.Int);

    sqlcmd.Parameters[0].Direction=System.Data.ParameterDirection.ReturnValue;

    sqlcmd.Parameters[1].Direction=System.Data.ParameterDirection.Output;

    sqlcon.Open();

    //int res=(int)sqlcmd.ExecuteNonQuery();//此时返回的不是存储过程的返回值,以上只是返回delete,update,insert所影响的行数

    sqlcmd.ExecuteNonQuery();

    string res=sqlcmd.Parameters[0].Value.ToString();//这样就可以得到存储过程的返回值

    sqlcon.Close();

    this.label1.Text="存储过程的返回值是:"+res.ToString();//由return 返回

    this.label2.Text="存储过程中返回的output值:"+sqlcmd.Parameters[1].Value.ToString();//由output返回

    展开全文
  • 本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下:在Pathon中如何执行存储过程呢?可以使用如下方法:存储过程定义基本如下:ALTER procedure [dbo]. [mysp]@...

    本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法。分享给大家供大家参考,具体如下:

    在Pathon中如何执行存储过程呢?可以使用如下方法:

    存储过程定义基本如下:

    ALTER procedure [dbo]. [mysp]

    @Station varchar ( 50),

    @SN varchar ( 50),

    @Info varchar ( 500) output ,

    @Msg varchar ( 500) output

    1. 使用adodbapi

    from adodbapi import connect

    server = 'dbserver'

    user = 'username'

    password = 'password'

    database = 'database'

    sp = 'sp'

    station = 'station'

    sn = 'sn'

    try :

    db = connect('Provider=SQLOLEDB.1 ;Data Source=%s;Initial Catalog=%s;/

    User ID=%s;Password=%s;'%(server, database, user, password))

    except Exception, e:

    print e

    else :

    cur = db.cursor()

    msg = cur.callproc(sp, (station, sn)) #参数与存储过程有关

    if len(msg) > 1 :

    if msg[-1 ] is None :

    print 'sn is ok. Can be test at this station'

    else :

    print msg[-1 ]

    finally :

    try : db.close()

    except : pass

    2. 使用pymssql

    from pymssql import connect

    server = 'dbserver'

    user = 'user'

    password = 'password'

    database = 'database'

    sp = 'sp'

    station = 'station'

    sn = 'sn'

    sql = ['set nocount on' ]

    sql.append('declare @Msg varchar(500)' )

    sql.append('declare @return_value varchar' )

    sql.append("exec @return_value = %s @Station = '%s', @SN = '%s', @Info = '@Info', @Msg = @Msg output" )

    sql.append('select @Msg, @return_value' )

    sql = '/n' .join(sql) % (sp, station, sn)

    def ffchk(server, user, password, database, sql):

    try :

    db = connect(host = server,

    database = database,

    user = user,

    password = password,

    login_timeout = 10 )

    cur = db.cursor()

    cur.execute(sql)

    except Exception, e:

    print e

    else :

    cur.nextset() # 要加上这句才能通过fetch函数取到值 注意:这语句在Python2.7对应的pymssql版本中是错误!!!

    print cur.fetchone()

    finally :

    try : db.close()

    except : pass

    总结:

    1. adodbapi简单,不用写一串的sql语句,但是不能取到返回的Error Code,只能取到返回的错误信息,也可能是我没找到方法

    2. pymssql与第一条相反,可以取到返回值和错误信息,但要写sql语句。

    这里重点说明一下使用pymssql的方法

    cur.execute("exec 存储过程名 @参数1=XXX, @参数2='YYY'......")

    cur.fetchone()        #如果该存储过程中有返回结果集,可以调用此句,如果存储过程是return,则pymssql不支持,无法获取,此句错误

    conn.commit()        #如果没有此句,则数据并没有真正生效,比如存储过程是执行insert的,没有commit的话,并不会真正插入数据

    一般通过此三步即可以应对很多使用存储过程的要求

    希望本文所述对大家Python程序设计有所帮助。

    展开全文
  • 你的存储过程有点过度设计,我喜欢 – 保持简单:)MySQL的drop table if exists tags;create table tags(tag_id int unsigned not null auto_increment primary key,name varchar(255) unique not null)engine=innodb;...

    你的存储过程有点过度设计,我喜欢 – 保持简单:)

    MySQL的

    drop table if exists tags;

    create table tags

    (

    tag_id int unsigned not null auto_increment primary key,

    name varchar(255) unique not null

    )

    engine=innodb;

    drop procedure if exists insert_tag;

    delimiter #

    create procedure insert_tag

    (

    in p_name varchar(255)

    )

    proc_main:begin

    declare v_tag_id int unsigned default 0;

    if exists (select 1 from tags where name = p_name) then

    select -1 as tag_id, 'duplicate name' as msg; -- could use multiple out variables...i prefer this

    leave proc_main;

    end if;

    insert into tags (name) values (p_name);

    set v_tag_id = last_insert_id();

    -- do stuff with v_tag_id...

    -- return success

    select v_tag_id as tag_id, 'OK' as msg;

    end proc_main #

    delimiter ;

    PHP

    ob_start();

    try{

    $conn = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);

    $conn->autocommit(FALSE); // start transaction

    // create the tag

    $name = 'f00';

    $sql = sprintf("call insert_tag('%s')", $conn->real_escape_string($name));

    $result = $conn->query($sql);

    $row = $result->fetch_array();

    $result->close();

    $conn->next_result();

    $tagID = $row["tag_id"]; // new tag_id returned by sproc

    if($tagID < 0) throw new exception($row["msg"]);

    $conn->commit();

    echo sprintf("tag %d created
    refresh me...", $tagID);

    }

    catch(exception $ex){

    ob_clean();

    //handle errors and rollback

    $conn->rollback();

    echo sprintf("oops error - %s
    ", $ex->getMessage());

    }

    // finally

    $conn->close();

    ob_end_flush();

    ?>

    展开全文
  • -- 我定义的存储过程如下,很简单的一个过程,并且在Cmd命令里面运行是正常的。USE appraisesystem;DROP procedure IF EXISTS protest;DELIMITER $$USE appraisesystem$$CREATE DEFINER=root@% PROCEDURE protest...
  • 使用Java代码/SQL语句调用存储过程并接收存储过程返回值创建存储过程SQL运行存储过程Java代码调用存储过程,接收返回值数据连接JAVA调用数据存储过程测试结果 创建存储过程 CREATE PROCEDURE add_pro (IN a1 ...
  • 要从存储过程返回值,您需要使用用户定义的会话特定变量。在变量名称前添加@符号。例如,对变量valido使用@symbol。相同的语法如下:SELECT@valido;每当使用select语句时,都需要使用@anyVariableName。语法如下:...
  • 在Pathon中如何执行存储过程呢?可以使用如下方法:存储过程定义基本如下:ALTER procedure [dbo]. [mysp]@Station varchar ( 50),@SN varchar ( 50),@Info varchar ( 500) output ,@Msg varchar ( 500) output1. ...
  • //存储过程//Create PROCEDURE MYSQL// @a int,// @b int,// @c int output//AS// Set @c = @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServ...
  • MySQL存储过程返回值

    2021-07-19 19:11:47
    I have to create an SP that returns a value if it's valid or not. But it doesn't return anything and I don't know, why?CREATE DEFINER=`root`@`localhost` PROCEDURE `validar_egreso`(IN codigo_producto V...
  • 1.获取Return返回值//存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStr...
  • create table tb_storage(id number(9),shopid varchar(10),storage number(10) not null);Table createdcreate table tb_shop(id number(9),shopid varchar(10),shopname varchar(20));Table createdinsert into tb...
  • Java执行Oracle存储过程并接收多个返回值(集合/数值)Java代码:package com.pure.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;...
  • 我有一个存储过程,它将对象添加到数据库并返回生成的ID号。作为参考,其基本结构如下:ALTER PROCEDURE [dbo].[myProc]@Name nvarchar(50),@Creator nvarchar(50),@Text nvarchar(200),@Lat float,@Lon float,@myID ...
  • 本文yjbys小编为大家主要介绍了Java调用MySQL存储过程并获得返回值的方法,实例分析了java实现MySQL存储过程的相关技巧,具有一定参考借鉴价值,需要的'朋友可以参考下本文实例讲述了Java调用MySQL存储过程并获得返回值...
  • 1:创建存储过程存储过程通过传入的参数(Name),返回一个参数(address)。create or replace procedure demo_procedure(namedemo in varchar2,addressdemo out varchar2)asbeginselect address into addressdemo ...
  • 1.获取Return返回值//存储过程//CreatePROCEDUREMYSQL//@aint,//@bint//AS//return@a+@b//GOSqlConnectionconn=newSqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());...
  • 1.获取Return返回值//存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStr...
  • 总体思路:map传值controller:Map m=new HashMap();m.put("name", 'zs');m.put("password", '55555');cardservice.bindCard(m);...//获得返回值json.put("msg", m.get("msg"));json.put("result", ...
  • 导读热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。private void empsInDept(Connection myConnect,int deptId) throws sqlException {CallableStatement...
  • 虽然Stack Overflow中有很多关于这个问题的问题但是我无法正确解决这个问题,任何人都可以帮我解决这个问题,让我们说有两个存储过程,CREATE PROCEDURE `procOne`(stName varchar(7),fullItemCode varchar(12), ...
  • java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)oracle中procedure是不能有返回值的,要想返回值,就得有输出参数,同样要想返回记录集,可以把游标类型作为输出参数。下面是详细情况说明:一:...
  • IBatis存储过程返回值

    2021-03-08 00:35:12
    获取存储过程返回值和输出参数值的方法//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...C&num; 获取 存储过程 返回值C#获取存储...
  • 本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下:CREATE PROCEDURE [dbo].[GetNameById]@studentid varchar(8),@studentname nvarchar(50) OUTPUTASBEGINSELECT @studentname=studentname ...
  • @o_id output --2.RETURN过程返回值 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEGIN SET NOCOUNT ON; IF(EXISTS(SELECT * FROM [Shop] WHERE [s_id] =...
  • 看到RETURN的返回值不同,代表意义各不同,能过查找,得出以下结论:RETURN语句会导致过程立即退出。考察下面的例子:CREATE PROCEDURE check_tables(@who VARCHAR(30))ASIF EXISTS(SELECT name FROM Philosophers ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 340,003
精华内容 136,001
关键字:

存储过程如何返回值

友情链接: jmeter.rar