MySQL: Функция, чтобы определять, если идентификация Существует

я нуждаюсь в том, чтобы сделать функцию в mysql, что возвратил под меня истинный, если один пойдите, существует, я должен посылать ему 3 параметра, имя таблицы, имени поля и стоимости, если есть в вышеупомянутой таблице реестр, который был бы идентифицирован со стоимостью, полученной в поле espeficicado таблицы, тогда функция должна возвращать TRUE, иначе FALSE.

я это попробовал следующего способа, но не распознает имя таблицы Ошибка Code: 1146. Table 'mydb.p_tabla' doesn't exist

CREATE DEFINER=`root`@`localhost` FUNCTION `existe_ID`(`p_tabla`VARCHAR(45), `p_campo` VARCHAR(100), `p_id` int UNSIGNED) RETURNS tinyint(1)
BEGIN
    DECLARE existe boolean DEFAULT FALSE;

    IF EXISTS (SELECT `p_campo` FROM `p_tabla` WHERE `p_campo` = `p_id`)THEN
        SET existe = TRUE;
    END IF;

  RETURN existe;
END
1
задан 12.09.2016, 06:21
2 ответа

То, что ты пробуешь сделать, не является возможным благодаря тому, что синтаксис, который использует MySQL (и другие DBMSs) для определения решений DML не позволяет выполнять ту же самую меняя имя таблицы динамического способа.

Это означает, что имя таблицы в решении DML не может быть переменной или аргументом.

Например, в следующей консультации:

SELECT `p_campo` FROM `p_tabla` WHERE `p_campo` = `p_id`;

Что считается в то, что он будет происходить, дело в том, что MySQL будет заменять параметр p_tabla тем, что содержит та же самая. Но это не происходит, вместо этого, он направляет буквально в p_tabla как будто это было имя существующей таблицы в базе данных, но очевидно вышеупомянутая таблица не существует.

Однако я даю тебе два выбора, чтобы добиваться того, что ты хочешь сделать:

  1. Создавать dinámicamente решение, что ты нуждаешься с языка в сервере (PHP, Java, NodeJS, и т.д.) и выполнять ее с Вашим соответствующим драйвером MySQL.

  2. Использовать ПРЕДСТЕНУ STATEMENTS в MySQL:

Главным образом говорится о функции MySQL, которая позволяет тебе создавать решения dinámicamente и они выполнять в той же среде, справедливый человек, что предполагается, что ты нуждаешься. Но я предупреждаю тебе, что у него есть Ваша цена, и они не были созданы для этого, так что я это оставляю в твое рассуждение.

Пример использования:

DELIMITER !
CREATE PROCEDURE listar(
    IN tabla VARCHAR(50), 
    IN campo VARCHAR(50), 
    IN valor INT
)
BEGIN
    SET @query = CONCAT('SELECT * FROM ', tabla, ' WHERE ', campo, ' = ', valor);
    PREPARE statement FROM @query;       -- Preparar query.
    EXECUTE statement;                   -- Ejecutar query.
    DEALLOCATE PREPARE statement;        -- Eliminar query alojado en memoria.
END!

Попробуй это в переводчике MySQL и смотри результат. Ты должен быть исследовано, возможно объединяться ли с функциями, потому что действительно не.

Здесь ты можешь находить больше информации относительно предстены statements.

Я надеюсь, что это было полезно для тебя.

1
ответ дан 24.11.2019, 13:25
  • 1
    Со вторым opci и # 243; n, и #191; позволять и # 237; в в tabla или campo немного как '; CREATE USER test1 IDENTIFIED BY 'pass1';? –  Paul Vargas 12.09.2016, 20:49
  • 2
    Если, всякий раз когда statement было решение, синтаксис которого и ejecuci и # 243; n будьте очевидно v и # 225; lida. Aqu и # 237; ( dev.mysql.com/doc/refman/5.7/en/… ) ты можешь видеть все решения SQL, которые выносит эта функциональность MySQL, в secci и # 243; n SQL Синтакс Альовед in Предстена Statements . –  Mauro Aguilar 13.09.2016, 03:55
  • 3
    Значимая часть: " SQL syntax for предстена statements does not support multi-statements (that is, многообразный statements within в single string separated by ; characters). " –  Paul Vargas 13.09.2016, 06:33

У меня есть функция, которая могла бы подавать тебя. Идея о функции состоит в том, чтобы перемещать три параметра Таблица, поле, которое нужно искать, и способ упорядочивать результаты.

function DevolverUltimoValor($tabla,$campo_buscar,$orden){
    $SelectSQL="SELECT " . $campo_buscar . " FROM " . $tabla . " ORDER BY " . $orden . " DESC Limit 1";
    $conn = dbConnect();
    $result = $conn->query($SelectSQL);
    $rows = $result->fetchAll();
    if ($result->rowCount() > 0) {
        foreach ($rows as $row) {
            $valor=$row[$campo_buscar]; //valor de la palabra
        }
    } else {
        $valor=0;
    }
    $conn = null;
    return $valor;
}
0
ответ дан 24.11.2019, 13:25