尝试从存储过程中调用存储的函数时,我收到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
我写了一个存储的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
我刚刚开始创建存储函数,这是我第一次,所以我遇到了一些问题。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) 我正在寻找一个存储过程代码,它将打开一个文本文件,读取数千行,并将代码添加到数据库中的表.有没有一种简单的方法在T-SQL中实现它?
我有一个旧的Oracle数据库,我正在尝试在EntityFramework 4.1应用程序中使用.
我已经读过oracle与EF有很大的限制 - 你不能用EF 调用Oracle存储的函数,除非你创建一个包装过程.
我的数据库中有成千上万的存储函数,有没有其他方法可以解决它?
喜欢用raw Context.SqlQuery()?
到目前为止,我找不到解决方案......
Oracle开发人员可以通过Entity Framework Function Imports(用于显式调用过程)和存储过程映射(实体Insert,Update和Delete操作自动调用)在实体框架内利用PL/SQL存储过程(有限制).
实体框架只能调用Oracle存储过程,而不能存储函数.(如果Oracle存储函数包含在对存储函数返回值使用OUT参数的存储过程中,则可以使用它们.)
我正在使用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) 我想更新表中的列,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)
总的来说,我甚至不确定这是否是我想做的最佳方式,任何建议都将不胜感激!
我一直在阅读问题标题上的错误,但我无法弄清楚下面代码中的错误是什么:
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 语句无法将数据返回给客户端
我有一个函数,我目前在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) 如果我多次调用一个函数,那么每次执行它还是只执行一次,然后在几次之后使用该值?例:
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')将在系统级别调用和执行?
stored-functions ×10
mysql ×5
sql ×4
c# ×2
sql-server ×2
.net ×1
ado.net ×1
database ×1
dynamic-sql ×1
oracle ×1
plpgsql ×1
postgresql ×1
recursion ×1
t-sql ×1