>  Q&A  >  본문

Robot Framework를 사용하여 SQL 스크립트가 포함된 저장 프로시저 실행

<p>데이터베이스 및 테이블 생성과 저장 프로시저 생성이 포함된 SQL 스크립트를 실행하고 싶습니다. 하지만 <strong>execute sql script</strong> 키워드를 사용하여 <strong>데이터베이스 라이브러리</strong>에서 sql 스크립트를 실행하려고 하면 다음 오류가 발생합니다. </p> <pre class="brush:php;toolbar:false;">ProgrammingError: (1064, "SQL 구문에 오류가 있습니다. 근처에서 사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 확인하세요. 'DELIMITER $$n 만들기 또는 절차 교체 `proc_GetCustomerDetails`(n I...' at line 2")</pre> <p>저장 프로시저 앞에 다음과 같은 <strong>구분 기호</strong>가 있습니다. </p> <pre class="brush:php;toolbar:false;">DELIMITER $$ 절차 `proc_GetCustomerDetails`( IN CustomerNbr LONGTEXT, IN LANG VARCHAR(5) ) 결정적 시작하다 IF Lang IS NULL THEN SET lang = "fin";; 종료하면; SELECT * dbname.customer에서; 종료;$$ DELIMITER ;</pre> <p>저장 프로시저 부분을 주석 처리하면 SQL 파일은 나머지 테이블 생성 문과 함께 오류 없이 실행됩니다. </p> <p>Google에서 검색했는데 관련 질문을 찾지 못했습니다. 저장 프로시저를 호출하는 키워드가 있는 것을 확인했습니다. 하지만 테이블 생성과 저장 프로시저를 동일한 SQL 파일에 넣고 실행하고 싶습니다. 이 작업에는 MariaDB를 사용하고 있습니다. </p> <p><strong>사용된 라이브러리</strong>: </p>
P粉031492081P粉031492081388일 전448

모든 응답(1)나는 대답할 것이다

  • P粉268284930

    P粉2682849302023-08-29 11:03:12

    DELIMITER는 클라이언트 전용 문이며 서버가 이를 지원하지 않으므로 오류가 발생합니다. 해결 방법 - 삭제하세요.

    여기 DELIMITER가 무엇이고 왜 필요한지 설명하는 매우 좋은 답변이 있는 질문이 있습니다.

    간단히 말하면, 클라이언트와 작업할 때 "이것은 즉시 실행될 명령문이 아니며 서버에 보낼 저장 프로시저의 한 줄일 뿐입니다"라고 표시하는 방법이 필요합니다. 따라서 (클라이언트) "문 사이의 DELIMITER는 일시적으로 $$입니다"라고 말합니다. 서버는 이에 대해 필요/관심하지 않습니다. 서버는 CREATE PROCEDURE, BEGIN, END 사이의 모든 것이 연결된 문, 즉 블록이라는 것을 알고 있습니다.

    API(pymysql)를 통해 데이터베이스에 연결하는 경우 대화형 클라이언트(shell, heidisql 등)와 비교할 때 SP를 청크로 전송하며 해당 명령문을 하나씩 실행할 방법이 없으므로 DELIMITER는 사용할 수 없습니다. 필요합니다. 서버는 이 명령을 지원하지 않으며 오류를 생성합니다. 삭제하세요.

    회신하다
    0
  • 취소회신하다