我正在尝试从我的dbConnect.php文件中创建PHP的过程,该文件用于提供对我的数据库的访问。此文件包含在需要数据库访问的每个文件中。不幸的是,这意味着已经创建的存储过程会导致代码抛出错误(因为它正在尝试创建已存在的存储过程)。
我已经尝试查看here以获取有关存储过程的帮助,以及将有助于创建存储过程的任何内容组合在一起,但我能找到的只是删除存储过程的示例过程如果已经创建。这似乎是一个巨大的浪费,因为每次需要数据库访问时都会调用一些可能很昂贵的方法 。
我正在尝试,而不是drop-and-recreate,只检查是否存在,如果它不存在,则创建它。换句话说,我想做类似以下的事情:
$storedProcedureExists = $connection->query(/* some query that checks for the existence of that stored procedure */);
if (!$storedProcedureExists)
{
// create the stored procedure here
}
答案 0 :(得分:1)
您可以使用以下查询来确定是否存在过程:
SELECT COUNT(*) AS found
FROM information_schema.routines
WHERE routine_schema = 'yourDBname'
AND routine_name = 'yourProcedureName'
如果$row['found']
为1
,则该过程已经存在,如果它0
它不存在。
答案 1 :(得分:1)
存储过程可在ROUTINES table的INFORMATION_SCHEMA database中查询。
您可以使用此查询在数据库中查找存储过程名称,假设您的数据库名称为dbname
且您的过程名称为procname
:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE="PROCEDURE"
AND ROUTINE_SCHEMA="dbname"
AND ROUTINE_NAME="procname"