반응형
테이블이 있는 경우 작업 수행
저는 그 곳에 있는 테이블이 무엇인지 알아보고 있습니다.OOK
그리고 만약 그렇다면, 그것에 뭔가를 하라.이것은 지금까지 제가 가지고 있는 것인데, 도움이 되는 사람과 함께 작동하지 않습니다.ERROR 1064 […] syntax error
메시지:
IF show tables like 'OOK' THEN
DELETE FROM OOK WHERE Id = 'Development';
INSERT INTO OOK VALUES ( 'Development', 'Localhost' );
END IF
이는 일부 레거시 코드를 지원하기 위한 것이며 문제에 대한 최선의 해결책이 아닐 수 있습니다.하지만, 그것은 제가 필요로 하는 것을 고칠 것입니다.
답변에 구문 오류가 많이 발생하므로 다음과 같은 버전이 있습니다.Server version: 5.5.60-MariaDB MariaDB Server
.
정보 스키마에 액세스하여 테이블의 존재 여부를 확인할 수 있습니다.또한 테이블 이름이 없는 경우 동적 SQL을 사용해야 합니다.
다음과 같은 방법을 사용해 보십시오.
IF EXISTS (SELECT 1
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
AND table_name = 'OOK') THEN
SET @s1 = 'DELETE FROM your_database_name.OOK WHERE Id = ?';
SET @a = 'Development';
PREPARE stmt1 FROM @s1;
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;
SET @s2 = 'INSERT INTO your_database_name.OOK VALUES (?, ?)';
SET @b = 'Development';
SET @c = 'Localhost';
PREPARE stmt2 FROM @s2;
EXECUTE stmt1 USING @b, @c;
DEALLOCATE PREPARE stmt2;
END IF
나는 아래의 절차와 기능을 db의 테이블 복제 과정에서 사용합니다.
사용.
CALL do_something('mydb', 'OOK', 'Development', 'Development', 'Localhost');
실행
DELIMITER $$;
CREATE PROCEDURE do_something(
IN dbName VARCHAR(255),
IN tableName VARCHAR(255),
IN id VARCHAR(255),
IN value1 VARCHAR(255),
IN value2 VARCHAR(255)
)
BEGIN
IF ( fn_table_exists(dbName, tableName) )
THEN
CALL statement(CONCAT(
'DELETE FROM ', tableName, ' WHERE Id = "', id, '"'));
CALL statement(CONCAT(
'INSERT INTO ', tableName, ' VALUES ( "', value1, '", "', value2, '" )'));
ELSE
SELECT CONCAT(
'ERROR: Table "', tableName, '" does not exist in the schema "', dbName, '".'
) AS ErrorMessage;
END IF;
END$$
DELIMITER ;
DELIMITER $$;
CREATE PROCEDURE statement(IN dynamic_statement TEXT)
BEGIN
SET @dynamic_statement := dynamic_statement;
PREPARE prepared_statement FROM @dynamic_statement;
EXECUTE prepared_statement;
DEALLOCATE PREPARE prepared_statement;
END$$
DELIMITER ;
DELIMITER $$;
CREATE FUNCTION fn_table_exists(dbName VARCHAR(255), tableName VARCHAR(255))
RETURNS TINYINT(1)
BEGIN
DECLARE totalTablesCount INT DEFAULT (
SELECT COUNT(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA COLLATE utf8_general_ci = dbName COLLATE utf8_general_ci)
AND (TABLE_NAME COLLATE utf8_general_ci = tableName COLLATE utf8_general_ci)
);
RETURN IF(
totalTablesCount > 0,
TRUE,
FALSE
);
END$$
DELIMITER ;
언급URL : https://stackoverflow.com/questions/52971999/do-something-if-a-table-exists
반응형
'programing' 카테고리의 다른 글
도커 컨테이너 안에 심볼릭 링크가 있는 호스트 디렉토리를 마운트합니다. (0) | 2023.09.08 |
---|---|
누가 MERGE 문이 오라클에서 실제로 무엇을 하는지 설명해 줄 수 있습니까? (0) | 2023.09.08 |
PowerShell 모듈의 변수 (0) | 2023.09.03 |
PDF C# 라이브러리로 Excel 전송 (0) | 2023.09.03 |
sudo가 없는 브라우저를 통해 root@localhost에 대한 PHP MariaDB 액세스가 거부되었습니다. (0) | 2023.09.03 |