标签: stored-functions

MySql从存储过程中调用存储的函数导致错误

尝试从存储过程中调用存储的函数时,我收到1064错误.它只发生在我尝试这样做的行上:SET account_id = get_account_id(user);.有什么问题,我该如何解决?

帐户ID存储功能:

CREATE DEFINER=`aaron`@`%` FUNCTION `get_account_id`(user VARCHAR(255)) RETURNS int(11)
BEGIN
    DECLARE xaccount_id INT DEFAULT 0;

   #Get Account ID and place into variable used when calling stored procedure that builds the tree structure for the leaf node portfolio id
    SELECT account_id
    FROM rst_sessions.session_data
    WHERE  username = user
    ORDER BY update_date DESC LIMIT 1
    INTO xaccount_id;

    RETURN xaccount_id;
END
Run Code Online (Sandbox Code Playgroud)

尝试调用存储函数的存储过程:

CREATE DEFINER=`aaron`@`%` PROCEDURE `build_report_portfolio_list`(user VARCHAR(255))
    READS SQL DATA
BEGIN

    DECLARE portf_id INT;
    DECLARE portf_name VARCHAR(255);
    DECLARE str_portf_parent_list …
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures stored-functions mysql-error-1064

7
推荐指数
1
解决办法
2万
查看次数

MySQL不支持递归函数?为什么?从何时起?

我写了一个存储的FUNCTION,递归地调用自己.

但是,当我在查询中运行它时,我得到了这个无耻的错误:

错误:1424 SQLSTATE:HY000(ER_SP_NO_RECURSION)

消息:递归存储函数和触发器允许的.

"不允许"?
对.为什么我们不只是禁用WHILE循环,而我们在它呢?

我可以以任何方式启用递归函数吗?
我发现了一个错误报告,但是有任何变通方法吗?
我在Windows XP(XAMPP Server)上运行MySQL 5.1.41.

mysql recursion stored-procedures user-defined-functions stored-functions

6
推荐指数
1
解决办法
8413
查看次数

mysql存储函数参数

我刚刚开始创建存储函数,这是我第一次,所以我遇到了一些问题。SELECT test();目前我使用(测试是现在的函数名称)调用该函数。我想向函数发送一个数字(用户名 ID)并返回用户名。

我通过使用SELECT test(1);1 来实现此目的,即表中用户的 ID。这似乎有效,因为返回了用户名,但如果我输入任何数字,也会返回相同的用户名。

BEGIN 

 DECLARE new_username VARCHAR(90);    

    SELECT `username` INTO  new_username FROM `users` WHERE `ID` = ID;

 return new_username;
END
Run Code Online (Sandbox Code Playgroud)

我已将参数设置为ID int

我是否正确地认为关键字INTO会将用户名的值放入变量中new_username?如果我在没有的情况下运行它,INTO我会收到错误:

不允许从函数返回结果集

我在这方面有没有犯过任何明显的错误,我希望我没有完全错误。感谢您的任何建议:)。

编辑:我刚刚在表中添加了几行,现在收到错误:

结果包含多行

完整的sql版本:

CREATE DEFINER=`elliotts`@`%` FUNCTION `test`(ID int) 
RETURNS varchar(32) CHARSET latin1
BEGIN 

    DECLARE new_username VARCHAR(32);

    SELECT `username` 
      INTO new_username 
      FROM `users` 
     WHERE `ID` = ID;

    return new_username;

END
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-functions

6
推荐指数
1
解决办法
4万
查看次数

存储过程以打开和读取文本文件

我正在寻找一个存储过程代码,它将打开一个文本文件,读取数千行,并将代码添加到数据库中的表.有没有一种简单的方法在T-SQL中实现它?

sql sql-server stored-procedures stored-functions

6
推荐指数
1
解决办法
3万
查看次数

在实体框架中使用存储的函数

我有一个旧的Oracle数据库,我正在尝试在EntityFramework 4.1应用程序中使用.
我已经读过oracle与EF有很大的限制 - 你不能用EF 调用Oracle存储的函数,除非你创建一个包装过程.

我的数据库中有成千上万的存储函数,有没有其他方法可以解决它?
喜欢用raw Context.SqlQuery()

到目前为止,我找不到解决方案......


Oracle文档:

Oracle开发人员可以通过Entity Framework Function Imports(用于显式调用过程)和存储过程映射(实体Insert,Update和Delete操作自动调用)在实体框架内利用PL/SQL存储过程(有限制).

实体框架只能调用Oracle存储过程,而不能存储函数.(如果Oracle存储函数包含在对存储函数返回值使用OUT参数的存储过程中,则可以使用它们.)

.net c# oracle entity-framework stored-functions

6
推荐指数
1
解决办法
8580
查看次数

如何在ado.net中执行表值函数?

我正在使用ado.net.

我的数据库中有一个函数jsp,它接受2个参数并返回一个表.我需要提示用户输入两个参数,然后执行jsp功能并将表打印到屏幕上.这是我目前拥有的:

jspCmd = new SqlCommand(jspStmt, conn);
jspCmd.CommandType = CommandType.StoredProcedure;

jspCmd.Parameters.Add("@snum", SqlDbType.VarChar, 5);
jspCmd.Parameters.Add("@pnum", SqlDbType.VarChar, 5);
jspCmd.Prepare();

Console.WriteLine();
Console.WriteLine(@"Please enter S# and P# separated by blanks, or exit to terminate");
string line = Console.ReadLine();
Regex r = new Regex("[ ]+");
string[] fields = r.Split(line);

if (fields[0] == "exit") break;
jspCmd.Parameters[0].Value = fields[0];
jspCmd.Parameters[1].Value = fields[1];

jspCmd.ExecuteNonQuery();//<---I BELIEVE ERROR COMING FROM HERE

reader = jspCmd.ExecuteReader();//PRINT TABLE TO SCREEN
while (reader.Read())
{
    Console.WriteLine(reader[0].ToString() + "  "
                      + reader[1].ToString()
                      + "  " + …
Run Code Online (Sandbox Code Playgroud)

c# database ado.net stored-procedures stored-functions

6
推荐指数
2
解决办法
1万
查看次数

如何在plpgsql中的"EXECUTE format()"中使用变量

我想更新表中的列,stats其中特定列是一个参数,然后返回该列的更新值[只有1行]:

CREATE FUNCTION grow(col varchar) RETURNS integer AS $$
DECLARE
tmp int;
BEGIN
    tmp := (EXECUTE format(
            'UPDATE stats SET %I = %I + 1
            RETURNING %I',
            col, col, col
            )
    );
    RETURN tmp;
END;
Run Code Online (Sandbox Code Playgroud)

总的来说,我甚至不确定这是否是我想做的最佳方式,任何建议都将不胜感激!

sql postgresql dynamic-sql plpgsql stored-functions

6
推荐指数
1
解决办法
7463
查看次数

包含在函数中的 Select 语句不能将数据返回给 client_New

我一直在阅读问题标题上的错误,但我无法弄清楚下面代码中的错误是什么:

CREATE function [RPT].[MonthlyRollupDates_Delimited]()
RETURNS @table TABLE (Value varchar(max))
AS
BEGIN

Declare @Count int , @Date date = getdate(),@Month int
SET @Month = MONTH(@Date)
SET  @Count = @Month +12


Select 
top (@Count) 
CalendarDate,   BusinessDay, Label
from  MonthlyRollupDates
order by Calendardate desc

return
end
GO
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

包含在函数中的 Select 语句无法将数据返回给客户端

t-sql sql-server stored-functions

6
推荐指数
1
解决办法
9138
查看次数

MySQL存储函数与嵌套IF ... END IF,语法错误,正确的语法使用''附近''

我有一个函数,我目前在PHP中使用它编写来自不同字段的邮件地址,但考虑到不同地区使用的不同格式.我试图将其复制为MySQL存储函数.我意识到在代码中而不是在数据库中执行此类操作通常会更快,但我们的Intranet可以让人们以只读方式输入原始MySQL SELECT命令,这样他们就可以构建高级搜索并保存查询.将使用此特定功能,以便用户可以将其高级搜索查询结果输出到标签布局.

当我尝试使用phpMyAdmin 3.4.9(最新稳定版)存储该函数时,我收到以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 51
Run Code Online (Sandbox Code Playgroud)

我还安装了最新的MySQL Workbench并得到了相同的错误,但它也突出显示了"END'附近的SQL语法错误",因此它不仅仅是phpMyAdmin中的一个错误(尽管它可能是phpMyAdmin和MySQL Workbench中的一个错误).

这是函数查询:

DELIMITER ;;
DROP FUNCTION IF EXISTS ADDRESS_BUILD;;
CREATE FUNCTION ADDRESS_BUILD(contact VARCHAR(50), company VARCHAR(100), add1 VARCHAR(255), add2 VARCHAR(255), add3 VARCHAR(255), town_city VARCHAR(50), county_state VARCHAR(50), postcode_zip VARCHAR(50), country VARCHAR(100), `separator` VARCHAR(10), type VARCHAR(10))
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE address TEXT;
DECLARE line TEXT; …
Run Code Online (Sandbox Code Playgroud)

mysql create-function stored-functions mysql-error-1064

5
推荐指数
2
解决办法
3万
查看次数

Mysql函数调用

如果我多次调用一个函数,那么每次执行它还是只执行一次,然后在几次之后使用该值?例:

 select my_function('filed'),my_function('filed')/field2, 
        (my_function('filed')*field1)/field3,
...... from my_table    where group by filed1;
Run Code Online (Sandbox Code Playgroud)

我的问题 my_function('filed')将被执行一次然后结果将被用于my_function('filed')/field2和/ (my_function('filed')*field1)/field3或每次都my_function('filed')将在系统级别调用和执行?

mysql stored-functions

5
推荐指数
2
解决办法
7万
查看次数