2012-11-26 3 views
0

디렉터리 자체를 제거하지 않고 MarkLogic에서 디렉터리 ($ 디렉터리)의 내용을 기본적으로 비 웁니다.xquery로 디렉터리 내용 삭제

let $_ := xdmp:directory-delete($directory) 
return xdmp:directory-create($directory) 

및 운영의 순서로 : 나는 다음을 시도 XQUERY 사용

(xdmp:directory-delete($directory), xdmp:directory-create($directory)) 

을 나는 오류가 "디렉토리가 이미 존재"얻는다.

디렉토리의 각 파일을 반복 재생하여 제거 할 수는 있지만 디렉토리 자체는 그대로 남겨 둘 수 있습니다. 디렉토리의 모든 내용을 완전히 지우고 싶습니다. 어떤 아이디어?

답변

0

xdmp : eval() 함수를 사용하여 각 트랜잭션을 다른 트랜잭션에서 실행해야한다는 것을 알았습니다. 다음 작업을 수행하면됩니다.

let $deleteCommand := "declare variable $directory as xs:string external; xdmp:directory-delete($directory)" 
let $createCommand := "declare variable $directory as xs:string external; xdmp:directory-create($directory)" 
let $_ := xdmp:eval($deleteCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>) 
let $_ := xdmp:eval($createCommand, (xs:QName("directory"), $directory),<options xmlns="xdmp:eval"><isolation>different-transaction</isolation><prevent-deadlocks>false</prevent-deadlocks></options>) 
return $_ 

eval에서 명령 중 하나를 실행하고 다른 하나를 호출하면 교착 상태가 발생하므로 작동하지 않습니다.

이 답변을 가지고 있음에도 불구하고 누군가가있는 경우 디렉토리의 내용을 삭제하는 솔루션에 관심이 있습니다.

+0

http://docs.marklogic.com/guide/app-dev/transactions#id_24388은 읽을만한 가치가 있습니다. 왜 두 가지 증거가 필요한지 설명합니다. 해당 섹션의 "Calling Statement"테이블의 첫 번째 행에서 항상 업데이트를 실행하려고합니다. 즉, 여러 업데이트가 관련된 경우 항상 읽기 전용 쿼리로 제어해야합니다. 업데이트를 통해 업데이트를 호출하는 것은 불가능하며 최악의 경우 위험합니다. – mblakele

관련 문제