문제

프롤로그를 배우고 있어요.앞으로 할 일이 있어요.Prolog ODBC INInterface를 사용하여 mysql 또는 MSSQL과 같은 데이터베이스에 일부 데이터를 삽입해야 합니다.나는 몇 가지 예시 술어가 있다는 것을 알고 있습니다(SWI-프롤로그) 좋다

open_wordnet :-
    odbc_connect('WordNet', _,
                 [ user(jan),
                   password(xxx),
                   alias(wordnet),
                   open(once)
                 ]).

나는 이러한 술어를 정확히 사용하고 실제 예를 보여주는 방법을 모릅니다.누구든지 프롤로그에서 MySSQL 또는 MSSQL과 같은 데이터베이스에 데이터를 삽입하기 위해 이것을 정확히 어떻게 사용하는지 알려주실 수 있습니까?누구든지 ProLOG를 통해 동일한 결과를 얻기 위한 정확한 요구 사항을 알려주실 수 있나요?

어떤 도움이나 정보라도 대단히 감사하겠습니다.

감사합니다.

도움이 되었습니까?

해결책

@ThomasH 및 @StarWind Software에 응답해 주셔서 감사합니다.당신이 지적한 것과 동일한 코드를 사용하여 솔루션을 알아낼 수 있습니다.자, 여기 완전한 그림이 있습니다.나는 Prolog에서 데이터베이스로의 연결에 대한 명확한 그림이 필요한 사람들이 너무 많다고 확신합니다.

노트:

  1. swi-prolog 내에서 모든 데이터베이스에 연결할 수 있습니다.저는 Oracle 10g와 MySQL 5를 사용했습니다.
  2. 먼저 'SWI-Prolog' ODBC 인터페이스를 다운로드하세요. 여기.

  3. 패키지 'ODBCProlog.dll'과 'OracleProlog.dll'에는 두 개의 주요 'dll' 파일이 있습니다.

    다음은 위와 동일한 샘플 코드입니다.섹션을 설명하겠습니다.

프롤로그의 MySQL 연결



:- use_module(oracle).
go :-
    db_open('mysql5', 'root', 'admin'),    
    db_import('EMP'('EMPID', 'EMPNAME'), emp),
    %%db_flag(show_query, _, off),

    db_query(emp(EMPID, EMPNAME), emp(EMPID, EMPNAME)),
    %% Run the query.
    get_result,
    %% Modify the database.
    %%emp_ins(109, 1, 221),
    %%test_del(109, 1, 221),
    %% Commit changes.
    db_transaction(commit),
    db_close.

%% Retrieve all records over backtracking.
get_result:-
    emp(EMPID, EMPNAME),
    write_ln([EMPID, EMPNAME]),
    fail.
get_result.

이제 설명 부분은 다음과 같습니다.

db_open('mysql5', '루트', '관리자'),

첫 번째 부분 'mysql5'는 mysql의 dsn 이름입니다.시스템에 설치되어 있지 않은 경우 MySQL 웹사이트에서 다운로드할 수 있습니다.다음은 사용자 이름과 비밀번호입니다.

db_flag(show_query, _, 끄기),

출력에 SQL 문을 인쇄합니다.주석을 달면 SQL 쿼리가 출력되지 않습니다.

db_import('EMP'('EMPID', 'EMPNAME'), emp),

여기서 'EMP'는 데이터베이스의 실제 테이블 이름이고 'emp'는 별칭입니다.이런 방식으로 만드는 것이 중요합니다. 그렇지 않으면 작동하지 않습니다.

db_query(emp(EMPID, EMPNAME), emp(EMPID, EMPNAME)),

다음으로 데이터베이스를 쿼리하기 위해 위 호출 'db_query'는 2개의 인수를 사용합니다.JOIN 문처럼 이를 사용하여 두 테이블을 쿼리할 수 있습니다.하나의 테이블만 쿼리하는 경우 이 호출에는 두 개의 인수가 필요하므로 동일한 쿼리를 두 번 제공해야 합니다.

데이터베이스 주석 해제에 무엇이든 삽입해야 합니까?

emp_ins(109, 1, 221),

이 규칙은 데이터베이스에 대한 삽입 호출임을 프롤로그에서 이해하는 별칭 이름에 _ins를 추가하는 것 외에는 아무것도 아닙니다.

비슷하게

emp_del(109, 1, 221),

나머지는 자명하다고 생각합니다.

이제 다음 부분은 Oracle 데이터베이스에 연결해야 하는 경우 변경되는 유일한 문은 다음과 같습니다.

:- use_module(odbc).

나머지는 거의 동일합니다.한 가지 기억해야 할 점은 데이터베이스를 지정할 때 oracle INSTANCE 이름을 사용해야 한다는 것입니다.일반적으로 Oracle 10g에서 인스턴스 이름은 다음과 같습니다. '오르클' Oracle Express 에디션의 경우 규칙은 다음과 같습니다.

'전체 컴퓨터 이름:port/XE','사용자 이름','비밀번호'

이 코드 블록을 사용하여 데이터베이스에 연결하고 결과를 표시할 수 있습니다.

도움이 되었기를 바랍니다.

다른 팁

오래된 예제가 포함되어 있습니다 이 메일 링리스트 대화 ( 'test_1'을 찾으십시오). 나는 그것과 함께 일하지 않았지만 나는 그것을 생각합니다 se_greenslades ODBC 데이터베이스 인스턴스 이름입니다. 지역 설정에서 당신의 것을 찾아야합니다. 그 후, 나는 당신이 삽입 및 업데이트를 수행하기 위해 정상적인 SQL Statments (ODBC_PREPARE?!)를 사용한다고 생각합니다. 이미 링크 한 SWI 문서를 확인하고 기본 ODBC 사용을 인터넷에 검색하십시오 (SWI 인터페이스는 꽤 표준이라고 생각합니다).

"Prolog"는 무엇을 의미합니까?

이 예는 어떻습니까 :

:- use_module(oracle).

go :-
    db_open('Your Database Name', 'scott', 'tiger'),
    db_import('DEPT'('DEPTNO', 'DNAME', 'LOC'), dept),
    db_import('EMP'('EMPNO', 'ENAME', 'JOB', 'MGR', 'HIREDATE', 'SAL', 'COMM', 'DEPTNO'), emp),
    %% Uncomment it, if you do not want to see SQL statements.
    %% db_flag(show_query, _, off),
    db_query(empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
        (   emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO),
            dept(DEPTNO, DNAME, LOC)
        )
    ),
    get_result,
    db_close.

get_result:-
    empinfo(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC),
    write_ln([EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, DNAME, LOC]),
    fail.
get_result.

여기에서 가져온 것 : http://www.geocities.com/siliconvalley/bit/1116/prologsqlex01.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top